Подтвердить что ты не робот

Обнаружение изменения фокуса для UITextField

Я пытаюсь настроить анимацию для представления вверх, когда клавиатура скрывается и появляется для текстовых полей, и я получил ее, чтобы она работала отлично, но когда фокус перемещается из одного текстового поля в другое, Не работает, так как клавиатура уже была показана.

В viewDidLoad я зарегистрировал следующее:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

а затем в методах клавиатурыWillShow и keyboardWillHide, он определяет, должно ли представление перемещаться или нет, и анимировать соответственно. Но если клавиатура уже была показана, и пользователь нажимает на другое текстовое поле, для которого требуется просмотр для перемещения вверх, метод не будет вызван. Есть ли способ определить, был ли фокус изменен на другое текстовое поле, когда клавиатура уже была показана? Было бы здорово, если бы был способ сделать это, не задав все текстовые поля делегатам.

Спасибо заранее.

4b9b3361

Ответ 1

Используйте методы делегата UITextField.. лучше для вашего случая, чем методы клавиатуры. Когда textField получил фокус, - (void)textFieldDidBeginEditing:(UITextField *)textField; будет запущен.. и когда он потеряет фокус - (void)textFieldDidEndEditing:(UITextField *)textField;, будет запущен.

Ответ 2

-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
if (textField.tag == 1) { //first textField tag
    //textField 1
}
else {
   //textField 2
}
}

Ответ 3

Использовать UITextFieldDelegate

и

func textFieldDidBeginEditing(textField: UITextField) {
        println("did")
        if textField.tag == 1{
            self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor
        }
    }