我创建了一个自定义UITableViewCell
,并在此原型单元格中放置了UITextView
。当我单击此textView时,键盘可以自动弹跳。但是,如果我想隐藏键盘,我必须单击Return
键。这不方便。
这是问题所在。
当我滚动桌面视图时,如何重新设置textView' firstResponder
以隐藏键盘。
cellForRowAtIndex
方法如下。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = UITableViewCell()
if(indexPath.section == 0){
cell = self.tableView.dequeueReusableCellWithIdentifier("InputCell")!
let textView = cell.viewWithTag(102) as! UITextView
textView.editable = true
textView.keyboardType = UIKeyboardType.Default
textView.delegate = self
textView.targetForAction(#selector(FeedBackViewController.getTextViewInsideCell(_:)), withSender: textView)
}
if(indexPath.section == 1){
cell = self.tableView.dequeueReusableCellWithIdentifier("ConfirmButtonCell")!
let label = cell.textLabel
label?.text = "send"
label?.textAlignment = NSTextAlignment.Center
label?.textColor = UIColor.redColor()
}
return cell
}
以下是我实施的一些方法。
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool{
if(text == "\n"){
textView.resignFirstResponder()
return false
}
return true
}
我不知道如何实现这个方法。
func scrollViewWillBeginDragging(scrollView: UIScrollView) {
}
答案 0 :(得分:6)
您可以尝试在viewDidLoad
上实现此功能,当tableview开始拖动时它会自动关闭键盘:
tableView.keyboardDismissMode = .Interactive
或.OnDrag
答案 1 :(得分:1)
UITableView
继承的 UIScrollView
符合UIScrollViewDelegateProtocol
。尝试覆盖scrollViewDidScroll
函数并从textview中退出第一个响应者。
确保将tableView的委托分配给视图控制器,然后添加以下代码
func scrollViewDidScroll(scrollView: UIScrollView) {
yourTextView.resignFirstResponder()
}
根据docs scrollViewDidScroll
当用户在接收者中滚动内容视图时告诉代理人。
<强>更新强>
另一种辞职第一响应者的方法是为您的观点设置endEditing
为true
:
使视图(或其中一个嵌入的文本字段)重新签署第一个响应者状态。
func scrollViewDidScroll(scrollView: UIScrollView) {
self.view.endEditing(true)
}
答案 2 :(得分:1)