键盘出现时tableView与scrollView的行为

时间:2015-09-30 08:38:49

标签: ios uitableview uiscrollview keyboard

如果文本字段打开键盘并且textfield是tableView的成员,那么它将能够滚动tableView以便能够看到最后一项,键盘将不会隐藏该项目。

enter image description here

如何? UITableView继承自UIScrollView。我猜开启键盘会增加内容偏移量吗?我是对的吗?

如果textfield是scrollView的一部分,而不是tableView,则不会发生此效果,并且键盘可以隐藏位于scrollView下半部分的其他控件。

如果我想看看与使用tableView的滚动视图相同的效果,我应该手动设置内容偏移吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

是的,您必须手动设置内容偏移量。

首先注册通知

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

然后用你的观察者方法。

func textFieldShouldReturn(textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}

func keyboardWillShow(notification:NSNotification){

    var userInfo = notification.userInfo!
    var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).CGRectValue()
    keyboardFrame = self.view.convertRect(keyboardFrame, fromView: nil)

    var contentInset:UIEdgeInsets = self.scrollView.contentInset
    contentInset.bottom = keyboardFrame.size.height
    self.scrollView.contentInset = contentInset
}

func keyboardWillHide(notification:NSNotification){

    var contentInset:UIEdgeInsets = UIEdgeInsetsZero
    self.scrollView.contentInset = contentInset
}

答案 1 :(得分:0)

您可以导入从https://github.com/michaeltyson/TPKeyboardAvoiding下载的TPKeyboardAvoiding类,并将UITableView类设置为TPKeyboardAvoidingTableView。