我已经找到了答案,但我没有能为我的具体案件工作。
我有UITableView
动态原型细胞。其中一个单元格只包含UITextView
,并且始终只有其中一个,它始终位于最底层。这是唯一的文本视图。
我无法将此文本视图连接到控制器中的插座,因为它会引发错误(我假设因为文本视图可能有多个实例,并且它们无法全部显示被映射到一个出口)。因此,我无法使控制器符合UITextView
协议。
这有一个简单而优雅的解决方案吗?
答案 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的委托方法。
片段就在这里
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
cell.yourTextView.delegate = self //Assign your textView delegate here
}
当tableview
键盘显示/消失时滚动NotificationCenter
,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) {
}
您可以使用以下方法检测键盘是否出现/消失
document.getElementById("demo").innerHTML
并且不要忘记删除Observer是viewLifeCycle的消失方法。
这里有一些第三方库来实现这一点
TPKeyboardAvoiding IQKeyboardManager [建议] - 当你要向上滚动tableview时,确保插入到表中的任何内容都将显示在表视图中。保持您的tableview以便每当您在tableview单元格中输入任何单个内容时,它必须是用户可见的。