iOS:键盘收起的一点小事

好吧,我承认今天是凑数的。
来,上图,看gif。

iOS:键盘收起的一点小事_第1张图片
keyboardCollapse.gif

这里的问题是,键盘回收后,莫名的在AlertView显示完后,再次弹出收回了。
为啥会有这个问题呢?代码如下,这里用的是UIAlertView(iOS9已经不用了,不过为了兼容iOS7,我们还是会用到的)。

textField.resignFirstResponder()
let alertView = UIAlertView.init(title: "Alert View", message: "test keyboard collapse", delegate: self, cancelButtonTitle: "cancel")
alertView.show()

键盘收回动画时长:0.25秒。
而这里我们在取消textfield的第一响应者之后,立刻弹出AlertView。相当于打断了键盘回收的动画。结果就是在AlertView完成后,又执行一边键盘收起的动画。
解决办法:
获取收回时间长度,延时该时长后,再弹出AlertView。
PS:相同的设定,用UIAlertController就不会有问题,不知道什么原因。
修正后的代码:

textField.resignFirstResponder()        
//延时0.5秒
let time: NSTimeInterval = 0.5
let delay = dispatch_time(DISPATCH_TIME_NOW,
Int64(time * Double(NSEC_PER_SEC)))
dispatch_after(delay, dispatch_get_main_queue()) {
  let alertView = UIAlertView.init(title: "Alert View",
  message: "test keyboard collapse", delegate: self,
  cancelButtonTitle: "cancel")
alertView.show()
}

获取键盘收回动画时长的方法:
通过通知UIKeyboardWillHideNotification,来获得键盘回收的信息。

override func viewDidLoad() {
  super.viewDidLoad()
  NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardHideAction:", name: UIKeyboardWillHideNotification, object: nil)
}

func keyboardHideAction(noti: NSNotification) {
  let userInfo = noti.userInfo
  if let animationDuration = userInfo!["UIKeyboardAnimationDurationUserInfoKey"] {
    print("\(animationDuration)")
  }
}

键盘收回的几种方法:

  • 取消textfield第一响应者
  • 取消textfield所在的父视图的第一响应者
//取消textfield第一响应者
textField.resignFirstResponder()
//取消textfield所在的父视图的第一响应者
view.endEditing(true)
//通过UIApplication获取当前视图,然后取消第一响应者
UIApplication.sharedApplication().keyWindow?.endEditing(true)

彩蛋

iOS:键盘收起的一点小事_第2张图片
运行时属性

我给Buuton添加了运行时属性,设定layer圆角。这里展示的是在XIB中设定运行时属性。

Demo地址见这里

你可能感兴趣的:(iOS:键盘收起的一点小事)