Ios 在不调用DidSelectRowatineXpath的情况下释放丢失的键盘
我有一个Ios 在不调用DidSelectRowatineXpath的情况下释放丢失的键盘,ios,swift,uitableview,keyboard,uitapgesturerecognizer,Ios,Swift,Uitableview,Keyboard,Uitapgesturerecognizer,我有一个ViewController,它有textSearchTableView:UITableView和搜索栏:UISearchBar 我添加了uitappesturerecognizer来解除键盘的锁定 override func viewDidLoad() { // ... self.tap = UITapGestureRecognizer(target: self, action: "DissmissKeyboard") self.tap.delegate = sel
ViewController
,它有textSearchTableView:UITableView
和搜索栏:UISearchBar
我添加了uitappesturerecognizer
来解除键盘的锁定
override func viewDidLoad() {
// ...
self.tap = UITapGestureRecognizer(target: self, action: "DissmissKeyboard")
self.tap.delegate = self
self.view.addGestureRecognizer(self.tap)
// ...
}
func DissmissKeyboard()
{
view.endEditing(true)
}
我添加了此功能以防止在选择单元格后中断(DidSelectRowatineXpath)功能
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if touch.view.isDescendantOfView(self.textSearchTableView) {
return false
}
return true
}
但问题是:当键盘被启用时,我想错过它
如果我单击文本搜索表视图,(didSelectRowAtIndexPath)将运行
如果我不调用(didSelectRowAtIndexPath)而单击表格视图
,我怎么会错过键盘?我也不想破坏这个函数
我希望我能很好地描述这个问题
非常感谢让tableview的委托返回nil怎么样
- (NSIndexPath *)tableView:(UITableView *)tableView
willSelectRowAtIndexPath:(NSIndexPath *)indexPath
由于
将选择RowatineXpath
可能是您想要的,但不是您要求的:为了回答实际问题,可以通过发送第一响应者辞职第一响应者来解除键盘。重新编写您的DidSelectRowatineXpath
:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if (self.searchBar.isFirstResponder())
{
self.searchBar.resignFirstResponder()
}
else
{
//Do something here
}
}
或者:我们通常在TableView中使用这种方法
self.tableView.keyboardDismissMode = .OnDrag
当在tableview中开始拖动时,这将关闭键盘。在您的情况下,如果用户单击屏幕上的任何位置,关闭键盘是个坏主意。用户会在哪里单击?它必须是表中的一行,因此是您的问题。我会在键盘上放置一个“完成”按钮,并将resiginFirstResponder附加到该按钮上。这个问题明确地询问如何在不调用didSelectRowatineXpath
的情况下完成该操作。这有什么帮助吗?谢谢,它工作了,但当我关闭键盘时,单元格被选中,因此我将这一行添加到if子句tableView中。取消行索引路径(indexPath,动画:true),但它也会被选中,然后取消选中请检查更新的答案,并让我知道它是否有帮助。您可以在viewDidLoad中写入这一行。。我希望它能让你的用户界面更直观。