Разработчики, работающие с платформой Embarcadero RAD Studio и языком Object Pascal, могут столкнуться с различными проблемами при разработке кросс-платформенных приложений. Одной из таких проблем является ошибка "Unsupported InputQuery Fields" при попытке использовать диалог ввода с двумя полями в приложениях для iOS.
Описание проблемы
Пользователи, использующие Delphi 10.4 для создания мобильных приложений, столкнулись с проблемой, когда использование InputQuery с двумя полями приводит к ошибке "Unsupported InputQuery Fields" на платформе iOS. В то время как такая же логика успешно работает на Windows и Android, на iOS функция работает корректно только с одним полем ввода.
Пример кода, который вызывает ошибку на iOS:
procedure TFrmMain.UserLevel_LbClick(Sender: TObject);
var
CodeNow, OldUserType: Integer;
begin
CodeNow := 12;
TDialogServiceAsync.InputQuery(
'Please enter code to change user level password',
['Code', 'Level'],
['000', '1'],
procedure(const AResult: TModalResult; const AValues: array of string)
begin
if AResult = mrOk then
if StrToInt(AValues[0]) = CodeNow then
begin
OldUserType := UserType;
UserType := StrToInt(AValues[1]);
ShowMessage('You have changed your level from ' + IntToStr(OldUserType) +
' to ' + IntToStr(UserType));
end
else
ShowMessage('Wrong code');
// Обработка нажатия кнопки отмена
if AResult = mrCancel then;
end);
end;
Причины возникновения ошибки
На iOS InputQuery использует UIAlertView изнутри, что ограничивает возможности ввода. Это связано с тем, что UIAlertView предназначен для простых диалогов с ограниченным количеством полей ввода.
Подтвержденный ответ
Для решения проблемы на iOS, необходимо использовать другой подход, так как UIAlertView не поддерживает несколько полей ввода. В качестве альтернативы можно подать запрос на добавление новой функции, которая позволит использовать что-то другое вместо UIAlertView, или же реализовать ввод данных другим способом.
Альтернативный ответ
Исследование проблемы показало, что использование двух полей ввода с InputQuery на iOS может быть ограничено из-за особенностей платформы. В качестве примера успешного решения проблемы можно привести использование альтернативного подхода, который был применен в отчете на портале качества (Quality Portal), где удалось отобразить два поля для ввода, предположительно, с использованием другого подхода, отличного от UIAlertView.
Рекомендации
Рассмотрите возможность использования других компонентов или методов ввода данных, которые поддерживаются в кросс-платформенной разработке с помощью Delphi, например, TInputDialog или создание пользовательского диалога.
Заключение
Разработчикам, столкнувшимся с данной проблемой, рекомендуется обратить внимание на ограничения, связанные с использованием UIAlertView на iOS, и рассмотреть альтернативные способы реализации диалогов ввода данных. Это может потребовать дополнительной настройки кода и возможно, использования более сложных компонентов интерфейса пользователя.
Эта статья предназначена для специалистов, работающих с Delphi и Object Pascal, и призвана помочь в устранении конкретной ошибки, связанной с использованием InputQuery на iOS, а также предоставить информацию о возможных альтернативных решениях.
Разработчики в Delphi 10.4 столкнулись с ошибкой при использовании `InputQuery` с двумя полями ввода в приложениях для iOS, что является следствием ограничений `UIAlertView`.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS