Swift:当键盘出现时滚动UITableView

3
我已经找到了答案,但对于我的具体情况却无法使它起作用。
我有一个包含动态原型单元格的UITableView。其中一个单元格只包含一个UITextView,并且始终仅有一个UITextView且位于最底部。这是唯一的文本视图。
由于可能存在多个UITextView实例,它们无法全部映射到一个插座,因此我无法将此文本视图连接到我的控制器的插座中。因此,我无法使我的控制器符合UITextView协议。
是否有简单而优雅的解决方案?
4个回答

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
 }

0

你可以在cellForRowAtIndexPath中将你的控制器设置为文本视图的代理,像这样:

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

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是通过在viewDidLoad中添加观察器来实现的,如下所示:

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) {

 }

不要忘记移除Observer的viewLifeCycle消失方法。

有一些第三方库可以实现这个功能,以下是其中的一些:

TPKeyboardAvoiding IQKeyboardManager [建议] - 当你将tableview向上滚动时,请确保您插入到表格中的任何内容都会显示在tableview中。保持您的tableview这样,以便无论何时您输入任何单个内容在tableview cell中,用户都必须能够看到它。


0

实际上,你认为无法使你的视图控制器符合UITextView协议的假设是错误的。你可以使用自定义单元格并将其附加到此自定义单元格中的属性。 然后,您可以为文本视图分配标记,并根据标记区分各种文本视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接