2015-02-22 3 views
0

В моем приложении у меня есть UIView, который содержит три текстовых поля:Предотвратить View From Раздвижная Когда Клавиатурные переключатели To Date Picker

Имя, Фамилия, Дата рождения.

Поля названия расположены рядом друг с другом на одной строке, а поле DOB находится под «линией» под ней.

Когда клавиатура открыта или закрыта, контроллер просмотра скользит вверх или вниз, чтобы убедиться, что поля не покрыты. Я могу переключаться с первого имени на фамилию без дополнительного скольжения, поскольку они остаются открытыми. Тем не менее, дата рождения установлена ​​для отображения UIDatePicker вместо клавиатуры. Когда пользователь перемещается из любого поля имени в поле «Дата», клавиатура переключается на «Датчик даты», но не выполняет функцию «keyboardWillHide». Тем не менее, он будет выполнять функцию «keyboardWillShow» для нового устройства выбора даты, тем самым снова вернув контроллер просмотра.

Из-за этой проблемы любой контент в верхней части страницы будет прокручиваться вне поля зрения без какого-либо способа вернуть его, за исключением перезапуска приложения или сброса координат источника VC на viewWillAppear/Disappear.

Вот что мой код выглядит на данный момент для скольжения:

func keyboardWillShow(notification: NSNotification) { 
     if let userInfo = notification.userInfo { 
      if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() { 
       kbHeight = keyboardSize.height 
       self.animateTextField(true) 
      } 
     } 
    } 

    func keyboardWillHide(notification: NSNotification) { 
     self.animateTextField(false) 
    } 

    func animateTextField(up: Bool) { 
      var movementDistance = 80 
      var movementDuration = 0.3 
      var movement = CGFloat(up ? -movementDistance : movementDistance) 
      UIView.beginAnimations("anim", context: nil) 
      UIView.setAnimationBeginsFromCurrentState(true) 
      UIView.setAnimationDuration(movementDuration) 
      self.view.frame = CGRectOffset(self.view.frame, 0, movement) 
      UIView.commitAnimations() 
    } 

ответ

0

я в конечном итоге создание отслеживания вара, чтобы сказать, когда клавиатура была открыта и закрыта. Таким образом, функция скольжения выполняет только при выполнении условия.

Мой новый код функции анимации:

func animateTextField(up: Bool) { 
     if(up) { 
      if(!keyboardIsOpen) { 
       var movementDistance = -80 
       var movementDuration = 0.3 
       var movement = CGFloat(movementDistance) 
       UIView.beginAnimations("anim", context: nil) 
       UIView.setAnimationBeginsFromCurrentState(true) 
       UIView.setAnimationDuration(movementDuration) 
       self.view.frame = CGRectOffset(self.view.frame, 0, movement) 
       UIView.commitAnimations() 
       keyboardIsOpen = true 
      } 
     } 
     else { 
      if(keyboardIsOpen) { 
       var movementDistance = 80 
       var movementDuration = 0.3 
       var movement = CGFloat(movementDistance) 
       UIView.beginAnimations("anim", context: nil) 
       UIView.setAnimationBeginsFromCurrentState(true) 
       UIView.setAnimationDuration(movementDuration) 
       self.view.frame = CGRectOffset(self.view.frame, 0, movement) 
       UIView.commitAnimations() 
       keyboardIsOpen = false 
      } 
     } 
    } 

Simple.