键盘存在时禁用 TableView 交互

Posted

技术标签:

【中文标题】键盘存在时禁用 TableView 交互【英文标题】:Disable TableView Interaction when Keyboard Present 【发布时间】:2015-07-17 03:40:26 【问题描述】:

我的 searchBar 在用户点击 searchBar 时显示键盘,并在用户点击外部时禁用键盘。

但是,点击手势与 tableView 内容交互。如何在键盘存在时禁用与 tableView 的交互?

override func viewDidLoad() 
    super.viewDidLoad()
    // dismiss keyboard if tapped outside of search
    let tapGesture = UITapGestureRecognizer(target: self, action: Selector("hideKeyboard"))
    tapGesture.cancelsTouchesInView = true //false doesn't work
    tableView.addGestureRecognizer(tapGesture)


func hideKeyboard() 
    searchBar.resignFirstResponder()

【问题讨论】:

【参考方案1】:

当键盘存在时添加一个透明的 UIView,当键盘关闭时将其移除。

var searchBackgroundView = UIView()
func searchBarTextDidBeginEditing(searchBar: UISearchBar) 
    searchBackgroundView = UIView(frame: CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.width, tableView.frame.height))
    tableView.addSubview(searchBackgroundView)


func searchBarTextDidEndEditing(searchBar: UISearchBar) 
    searchBackgroundView.removeFromSuperview()

【讨论】:

【参考方案2】:

两个快速的想法:

    在整个滚动视图上显示一个透明按钮,而不是使用手势识别器,这将捕获事件并阻止与滚动(表格)视图的交互 在滚动视图类中存储手势识别器,并在完成后恢复它们。

【讨论】:

【参考方案3】:

您可以通过检查searchController 是否为active 来尝试。就像..

if searchController.active 
    tableView.userInteractionEnabled = false

else 
    tableView.userInteractionEnabled = true

或您选择的其他方式

func searchBarTextDidBeginEditing(searchBar: UISearchBar) 
      self.tableView.userInteractionEnabled = false   

func searchBarTextDidEndEditing(searchBar: UISearchBar) 
      tableView.userInteractionEnabled = true

【讨论】:

以上是关于键盘存在时禁用 TableView 交互的主要内容,如果未能解决你的问题,请参考以下文章

Tableview编辑模式下禁用TextField

当键盘出现时,如何阻止 tableView 滚动? [复制]

如何临时禁用tableview上的滚动

一次禁用根视图交互并启用子视图交互

在 Tableview 上添加开关按钮并禁用单元格选择

为 TableView 单个单元格设置禁用属性