UITableViewCell 中的 UITextView,如何在 tableView 滚动时退出 textview 的 firstResponder?
UITextView inside a UITableViewCell, how to resign textview's firstResponder when tableView scrolls?
我创建了一个自定义 UITableViewCell
,并将 UITextView
放入此原型单元格中。当我点击这个 textView 时,键盘会自动弹起。但是,如果我想隐藏键盘,则必须单击 Return
键。不太方便。
这是问题。
当我滚动 tableview 时,如何退出 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) {
}
您可以尝试在 viewDidLoad
上实现它,它会在 tableview 开始拖动时自动关闭键盘:
tableView.keyboardDismissMode = .Interactive
或 .OnDrag
UITableView
继承自UIScrollView
,符合UIScrollViewDelegateProtocol
。尝试从中覆盖 scrollViewDidScroll
函数并从 textview 中退出第一响应者。
一定要把tableView的delegate分配给你的view controller,然后添加下面的代码
func scrollViewDidScroll(scrollView: UIScrollView) {
yourTextView.resignFirstResponder()
}
根据docs scrollViewDidScroll
Tells the delegate when the user scrolls the content view within the receiver.
更新
另一种退出第一响应者的方法是将 endEditing
设置为 true
以供您查看:
Causes the view (or one of its embedded text fields) to resign the first responder status.
func scrollViewDidScroll(scrollView: UIScrollView) {
self.view.endEditing(true)
}
这很容易你也可以用故事板做同样的事情
打开故事板
select 表视图或集合视图
和 select 拖动
我创建了一个自定义 UITableViewCell
,并将 UITextView
放入此原型单元格中。当我点击这个 textView 时,键盘会自动弹起。但是,如果我想隐藏键盘,则必须单击 Return
键。不太方便。
这是问题。
当我滚动 tableview 时,如何退出 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) {
}
您可以尝试在 viewDidLoad
上实现它,它会在 tableview 开始拖动时自动关闭键盘:
tableView.keyboardDismissMode = .Interactive
或 .OnDrag
UITableView
继承自UIScrollView
,符合UIScrollViewDelegateProtocol
。尝试从中覆盖 scrollViewDidScroll
函数并从 textview 中退出第一响应者。
一定要把tableView的delegate分配给你的view controller,然后添加下面的代码
func scrollViewDidScroll(scrollView: UIScrollView) {
yourTextView.resignFirstResponder()
}
根据docs scrollViewDidScroll
Tells the delegate when the user scrolls the content view within the receiver.
更新
另一种退出第一响应者的方法是将 endEditing
设置为 true
以供您查看:
Causes the view (or one of its embedded text fields) to resign the first responder status.
func scrollViewDidScroll(scrollView: UIScrollView) {
self.view.endEditing(true)
}
这很容易你也可以用故事板做同样的事情
打开故事板
select 表视图或集合视图
和 select 拖动