2016-02-13 5 views
1

У меня есть класс ниже. Я в основном добавляю NSNotification, чтобы проверить, работает ли клавиатура. Если клавиатура вставлена, я меняю рамку кнопки, чтобы найти ее поверх клавиатуры. Думаю, я сделал это правильно, но кнопка, по-видимому, не двигается. В чем может быть проблема?Перемещение UIButton, когда клавиатура всплывает

class vc: UIViewController { 
var previousButton: UIButton! 
var nextButton: UIButton! 

override func viewDidLoad() { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil) 

    previousButton = UIButton(frame: CGRectMake(margin + 20, containerView.frame.size.height + 10, 80, 30)) 
     previousButton.setImage(UIImage(named: "previous"), forState: .Normal) 
     previousButton.addTarget(self, action: "previousButtonPressed2:", forControlEvents: .TouchUpInside) 

     nextButton = UIButton(frame: CGRectMake(self.view.frame.width - margin - 80 - 20, containerView.frame.size.height + 10 , 80, 30)) 
     nextButton.setImage(UIImage(named: "next"), forState: .Normal) 
     nextButton.addTarget(self, action: "nextButtonPressed2:", forControlEvents: .TouchUpInside) 
     self.view.addSubview(previousButton) 
     self.view.addSubview(nextButton) 

} 

    func keyboardWillShow(notification: NSNotification) { 
     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() { 
      previousButton = UIButton(frame: CGRectMake(10 + 20, self.view.frame.size.height - keyboardSize.height - 40, 80, 30)) 
     } 
    } 

    func keyboardWillHide(notification: NSNotification) { 
     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() { 
       previousButton = UIButton(frame: CGRectMake(10 + 20, self.view.frame.size.height - 40, 80, 30)) 
     } 
    } 
} 

ответ

2

Вы должны проверить UIKeyboardFrameEndUserInfoKey ключ в keyboardWillShow: методе вместо UIKeyboardFrameBeginUserInfoKey. То же самое касается keyboardWillHide: метода:

func keyboardWillShow(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() { 
     previousButton = UIButton(frame: CGRectMake(10 + 20, self.view.frame.size.height - keyboardSize.height - 40, 80, 30)) 
    } 
} 

func keyboardWillHide(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() { 
      previousButton = UIButton(frame: CGRectMake(10 + 20, self.view.frame.size.height - 40, 80, 30)) 
    } 
} 

UIKeyboardFrameBeginUserInfoKey позволяет получить рамку клавиатуры от до начала анимации клавиатуры, когда вы действительно нуждаетесь в рамке клавиатуры, когда клавиатура полностью видна на экране. Это значение можно получить с помощью UIKeyboardFrameBeginUserInfoKey.

+0

Я пробовал это, и нет никакой разницы, к сожалению. – Kahsn

+0

Можете ли вы рассказать мне, как 'height' (вы используете свойство' keyboardSize.height') реализуется в 'CGRect'? Я предполагаю, что вы добавили расширение - Можете ли вы проверить, что он работает правильно? –

+0

Высота правильно реализована в типе CGRect. Он просто вычисляется из переменной keyboardSize в моем коде. – Kahsn

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