Swift:键盘出现时滚动UITableView

时间:2017-07-28 16:28:48

标签: ios swift uitableview scroll

我已经找到了答案,但我没有能为我的具体案件工作。

我有UITableView动态原型细胞。其中一个单元格只包含UITextView,并且始终只有其中一个,它始终位于最底层。这是唯一的文本视图。

我无法将此文本视图连接到控制器中的插座,因为它会引发错误(我假设因为文本视图可能有多个实例,并且它们无法全部显示被映射到一个出口)。因此,我无法使控制器符合UITextView协议。

这有一个简单而优雅的解决方案吗?

4 个答案:

答案 0 :(得分:0)

尝试观察VC中出现的键盘事件。像这样:

NotificationCenter.default.addObserver(self, selector: #selector(scrollToTop(notification:)), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(scrollToBottom(notification:)), name: .UIKeyboardWillHide, object: nil)

func scrollToTop(notification: NSNotification) {
        //change tableView insets
}


func scrollToBottom(notification: NSNotification) {
          //change tableView insets
 }

答案 1 :(得分:0)

您可以将控制器设置为 cellForRowAtIndexPath 中的textview代理

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    ...
    cell.textView.delegate = self
    ...
    return cell
}

答案 2 :(得分:0)

实际上你假设你不能让你的视图控制器符合UITextView协议是错误的。您可以使用自定义单元格并将插座添加到此自定义单元格中的属性。 然后,您可以为文本视图分配标签,并根据标签区分各种textView。

答案 3 :(得分:0)

要在ViewController中设置textview的委托,您需要在cellForRowAtIndexPath中设置它,并且可以在viewController中访问textview的委托方法。

带有swift 3的

片段就在这里

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.yourTextView.delegate = self //Assign your textView delegate here

}

tableview键盘显示/消失时滚动NotificationCenterviewDidLoad添加键盘观察者在NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: .UIKeyboardWillShow, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: .UIKeyboardWillHide, object: nil) 上显示/消失,如下所示

func keyboardWillShow(notification: NSNotification) {
     print((notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue.size.height)
}


func keyboardWillHide(notification: NSNotification) {

 }

您可以使用以下方法检测键盘是否出现/消失

document.getElementById("demo").innerHTML
并且不要忘记删除Observer是viewLifeCycle的消失方法。

这里有一些第三方库来实现这一点

TPKeyboardAvoiding IQKeyboardManager [建议] - 当你要向上滚动tableview时,确保插入到表中的任何内容都将显示在表视图中。保持您的tableview以便每当您在tableview单元格中输入任何单个内容时,它必须是用户可见的。