键盘存在时禁用 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 交互的主要内容,如果未能解决你的问题,请参考以下文章