iOS (Swift): UITextField ** не ** первый респондент после вызова методаcomeFirstResponder? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть массив UITextField s внутри UIViewController:

@IBOutlet weak var textField1: UITextField!
@IBOutlet weak var textField2: UITextField!
var textFields: [UITextField] {
    return [textField1, textField2]
}

В моем методе viewDidLoad я установил первый элемент массива textFields как первый респонденти установите всех их делегатов следующим образом:

override func viewDidLoad() {
    super.viewDidLoad()

    textFields[0].becomeFirstResponder()
    textFields.forEach({ $0.delegate = self })

    print(textFields.map({ $0.isFirstResponder })) // [false, false]

}

Однако, оператор print в viewDidLoad печатает [false, false], а не [true, false], как я мог бы ожидать.Почему?

Спасибо

1 Ответ

0 голосов
/ 31 мая 2018

Вы запускаете этот код слишком рано.Ни одно текстовое поле не может стать первым респондентом во время viewDidLoad, потому что в интерфейсе еще нет текстового поля.

Другими словами, попробуйте изменить код на:

print(textFields.map({ $0.window == nil }))

Вы получите [true, true], доказывая, что текстовые поля еще не находятся ни в одном окне.Но статус первого респондента основан на окне;свободно плавающее текстовое поле не может быть первым респондентом.

...