0

У меня есть раскадровка сцены, которая имеет только два UITextField .Отель первые один осталась нетронутой, свежей из библиотеки объектов. Второй имеет выход делегата, подключенный к коду ViewController.'resignFirstResponder() возвращает истину, и текстовое поле теряет фокус, но клавиатура не освобождает

App's interface

The second text field's connection in IB

(К сожалению, я должен размещать изображения таким образом, потому что StackOverflow не позволит мне.)

код очень прост. Это все.

class ViewController: UIViewController, UITextFieldDelegate {  
    func textFieldDidBeginEditing(textField: UITextField) { 
     textField.resignFirstResponder() 
    } 
} 

Единственное, что он делает - это отпустить клавиатуру, когда она вот-вот появится.

Первый показывает клавиатуру в обычном режиме. Второй не отображает клавиатуру, потому что она сразу же увольняется.

Все работает отлично самостоятельно, пока я не щелкнул по первому текстовому полю, чтобы открыть клавиатуру, затем с помощью клавиатуры на экране, я нажимаю второе текстовое поле. Что происходит дальше, так это то, что второе текстовое поле теряет фокус, но клавиатура остается на экране.

Использование print(:), я проверил, что, когда я называю resignFirstResponder на втором текстовом поле, это первый ответчик, и возвращаемое значение этого вызова не true, и после вызова он больше не является первым ответчиком ,

Но клавиатура все еще там ...

Я попытался добавить print(:) в textFieldShouldReturn(:) метод делегата, и нажав на кнопку возврата после текстового поля в отставку. На консоли отладки ничего не было напечатано.

Я пробовал disablesAutomaticKeyboardDismissal(), не возвращая ни false, ни true не производит никаких различий.

Редактировать

То, что я хочу, это просто: Я хочу первое текстовое поле, чтобы делать то, что он по умолчанию делать, а вторая один, чтобы отклонить его клавиатуру, как только он постучал (с точки зрения пользователя, в основном что означает не показывать его).

Я знаю textFieldShouldBeginEditing(:), но я не могу использовать его по разным причинам, я просто должен уволить клавиатуры на после она была активирована.

Редактировать Опять

Я попытался view.endEditing(true), а также. Фактически, я пробовал .endEditing(true) на каждом изображении в сцене. Не работает.

ответ

1

Try то вроде этого:

func textFieldShouldBeginEditing(textField: UITextField) -> Bool { 
    view.endEditing(true) 
    return true 
} 

func textFieldDidBeginEditing(textField: UITextField) { 
    textField.resignFirstResponder() 
    //make here whatever you like 

} 
+0

Жаль, что я не сделал мои намерения яснее. Меня не интересует поведение первого текстового поля.Я хочу убрать клавиатуру для второго текстового поля. И я уже пробовал EndEditing. Кажется, это не работает. Пожалуйста, ознакомьтесь с моими изменениями к вопросу. – CCC

+0

Я отредактировал свой ответ. Это хорошо для вас? –

+0

Это работает! И замена цикла for-in вызовом 'endEditing (true)' также работает. Можете ли вы сказать мне, почему это работает? – CCC