Как сделать акцент на текстовое поле? - PullRequest
0 голосов
/ 16 мая 2019

Очень простая настройка: у меня есть сцена ViewController с TextField на нем. ViewController является делегатом текстового поля.

Я хотел бы иметь следующее поведение: Когда пользователь вводит текстовое поле (т.е. нажимает на него), я хотел бы отобразить окно модального предупреждения с кнопкой ОК. После того, как пользователи нажмут OK, TextField должен получить фокус (то есть курсор внутри него мигает).

Я не могу заставить это работать. Я реагирую на то, что пользователь нажимает на текстовое поле textFieldShouldBeginEditing(). Это работает в том смысле, что я могу отобразить окно сообщения там. Но после того, как пользователь (в данном случае это я; o)) нажмет кнопку ОК, текстовое поле не имеет фокуса, и когда я коснусь его снова, снова появится окно сообщения.

Как мне от этого избавиться?

1 Ответ

1 голос
/ 16 мая 2019

Вы действительно хотите, чтобы модальное диалоговое окно показывало каждый каждый раз, когда щелкается текстовое поле? Имейте в виду, что размещение активации в textFieldShouldBeginEditing() будет означать, что повторная активация поля после закрытия диалогового окна снова покажет диалоговое окно.

Может быть, вам просто нужно показать диалог один раз? В этом случае простой логический флаг, установленный при первом показе, решит проблему. То есть в области видимости контроллера:

var hasShownWarningDialog = false

и затем реализовать вместо (после комментариев):

func textFieldShouldBeginEditing(textField: UITextField) -> Bool
{
  if !hasShownWarningDialog
  {
    hasShownWarningDialog = true
    // Create dialog here
    self.present(alert, animated: true, completion: {self.textField.becomeFirstResponder()})
    return false
  }
  else
  {
    return true
  }
}
...