2015-11-17 3 views
2

Я пытаюсь сделать UIView с UITextField и UIButton в нем - как приложения чата.клавиатура появляется действие

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

Как это сделать?

Теперь у меня есть это

@IBOutlet weak var messageTextField: UITextField! 
    @IBOutlet weak var bottomBarConstrains: NSLayoutConstraint! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil); 
     NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil); 

    } 

    override func didReceiveMemoryWarning() 
    { 
     super.didReceiveMemoryWarning() 
    } 

    @IBAction func sendAction(sender: AnyObject) 
    { 
     messageTextField.resignFirstResponder(); 
    } 

    func keyboardWillShow(notification: NSNotification) 
    { 
     var info = notification.userInfo! 
     let keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue() 
     let duration = info[UIKeyboardAnimationDurationUserInfoKey] as! Double 

     UIView.animateWithDuration(duration, delay: 2, options: UIViewAnimationOptions.CurveEaseIn, animations: 
      {() -> Void in 
       self.bottomBarConstrains.constant = keyboardFrame.size.height; 
      }, 
      completion: nil); 
    } 

    func keyboardWillHide(notification: NSNotification) 
    { 
     var info = notification.userInfo! 
     let duration = info[UIKeyboardAnimationDurationUserInfoKey] as! Double 

     UIView.animateWithDuration(duration, animations: {() -> Void in 
      self.bottomBarConstrains.constant = 0; 
     }) 
    } 

Но это происходит без анимации

ответ

2

Если вы оживляющий изменены ограничения вам нужно будет использовать метод layoutIfNeeded на том, что использует это ограничение. Этот метод заставляет просмотр изменять подменю макета, но только если он ему нужен. Поскольку изменения ограничений не автоматически заставляют позицию позиции изменять, вам необходимо вызвать этот метод. Так что, если ваш messageTextView является подтаблицей из self.view использования:

self.bottomBarConstrains.constant = keyboardFrame.size.height 

UIView.animateWithDuration(duration, delay: 2, options: .CurveEaseIn, animations: { 
    self.view.layoutIfNeeded() 
}, completion: nil); 
2

Изменить код клавиатуры Открыть и скрыть, как показано ниже, Удалить Задержка при открытии KeyBoard,

func keyboardWillShow(notification: NSNotification) 
    { 

     var info = notification.userInfo! 
     let keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue() 
     let duration = info[UIKeyboardAnimationDurationUserInfoKey] as! Double 
     self.bottomBarConstrains.constant = keyboardFrame.size.height 

     UIView.animateWithDuration(duration, animations: {() -> Void in 

      self.messageTextField.layoutIfNeeded() 
      self.view.layoutIfNeeded() 
     }) 
    } 

    func keyboardWillHide(notification: NSNotification) 
    { 
     var info = notification.userInfo! 
     let duration = info[UIKeyboardAnimationDurationUserInfoKey] as! Double 
     self.bottomBarConstrains.constant = 0; 

     UIView.animateWithDuration(duration, animations: {() -> Void in 

      self.messageTextField.layoutIfNeeded() 
      self.view.layoutIfNeeded() 
     }) 
    } 

Выход:

enter image description here