2015-08-31 3 views
1

В моем UIViewController есть два UITextField внизу. Итак, на клавиатуре я пытаюсь двигаться дальше. Ниже приведен мой код для обработки клавиатурыUIKeyboardDidShowNotification вызывается дважды

override func viewWillAppear(animated: Bool) { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardShown:", name: UIKeyboardDidShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardHidden:", name: UIKeyboardDidHideNotification, object: nil) 
} 

override func viewWillDisappear(animated: Bool) { 
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardDidShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardDidHideNotification, object: nil) 
} 

// MARK: - Handling Notification 
func keyboardShown(notification: NSNotification){ 
    if let initialFrame = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() { 
     let convertedFrame = self.view.convertRect(initialFrame, fromView: nil) 

     iY = viewLogin.frame.origin.y 

     var currentFrame = viewLogin.frame 
     currentFrame.origin.y = convertedFrame.origin.y - 140 
     self.viewLogin.frame = currentFrame 
     UIView.animateWithDuration(0.2, animations: {() -> Void in 

     }) 
    } 
} 


func keyboardHidden(notification: NSNotification){ 
    var currentFrame = viewLogin.frame 
    currentFrame.origin.y = iY 
    UIView.animateWithDuration(0.2, animations: {() -> Void in 
     self.viewLogin.frame = currentFrame 
    }) 
} 

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

Заранее спасибо

+0

Извините. Я не понимаю, о чем вы спрашиваете? Я использую делегат UITextField для отставки клавиатуры с помощью UITextField.resignFirstResponder() –

+0

Я не использую эти методы UITextFieldDelegate. Я использую уведомление по клавиатуре. –

+0

, если вы не используете делегатов uitextfield, тогда вам нужно будет установить переменную bool, чтобы найти, что клавиатура уже появилась или нет. – AnshaD

ответ

0

Проблема была связана с AutoLayout. Я решил это как ниже

// MARK: - Handling Notification 
func keyboardShown(notification: NSNotification){ 
    self.bottomConstraint.constant += 125 
    UIView.animateWithDuration(0.3, animations: {() -> Void in 
     self.viewLogin.layoutIfNeeded() 
    }) 
} 


func keyboardHidden(notification: NSNotification){ 
    self.bottomConstraint.constant -= 125 
    UIView.animateWithDuration(0.3, animations: {() -> Void in 
     self.viewLogin.layoutIfNeeded() 
    }) 
} 

Нам нужно изменить свойство ограничения, если бы мы использовали AutoLayout.

Смежные вопросы