无法让 didSelectRowAt 为 TableView 工作
Can't get didSelectRowAt to work for TableView
我无法让 didSelectRowAt
方法在常规 ViewController
中为 TableView
工作。我已经确保在 ViewController
代码中设置了 table 的 delegate
和 data source
。此 ViewController
使用搜索查询的结果填充 tableview
单元格到 API,单元格数据的呈现工作正常。
只是didSelectRowAt
方法没有注册。我确实尝试在 Main.storyboard 上手动添加相同的委托信息,但是 +
小符号不会触发任何弹出窗口 windows。我想知道 Main.storyboard
中是否有需要修复的内容。我还附上了 ViewController
和 TableView
连接检查器的图像。我是 iOS 开发的新手,在移动设计的图形界面方面没有太多经验,所以我假设它在那里,但也许我错了。
这是我的代码的基本版本:
class SearchViewController: UIViewController, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
@IBOutlet var searchBar: UISearchBar!
...variable declarations ....
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardWhenTappedAround()
searchResults = []
searchBar.delegate = self
tableView.dataSource = self
tableView.delegate = self
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults!.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "searchTableViewCell", for: indexPath) as! SearchTableViewCell
if(searchActive && !(self.searchResults?.isEmpty)!) {
(doing some stuff with search results here...works fine)
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("hello!")
}
func searchBar(_ searchBar: UISearchBar,
textDidChange searchText: String) {
print("search text \(searchText)")
getSearchResultJSON(term: searchText) { json in
let data = json as! [Dictionary<String, String>]
self.searchResults = data
}
self.tableView.reloadData()
}
...
}
[]
[]
编辑: 作为对搜索异步函数是否正在更改任何内容的完整性检查,我只是尝试删除所有与搜索相关的代码并填充 table 视图一个硬编码的虚拟变量数组。它可以显示虚拟变量,但仍然无法 select 一个单元格并得到任何反应。我还看到有几个人提到我之前用 didDeSelectRowAt 而不是 didSelectRow at 打错了字,现在已经修复但行为是一样的。
这最终与我编写的 hideKeyboardWhenTappedAround() 扩展中出现的点击手势有关
您正在使用 didDeselectRowAt
而不是 didSelectRowAt
编辑
好吧,下面就用这个delegate然后
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
并使您的控制器符合 UIGestureRecognizerDelegate
如果您在主视图上使用点击手势,那么 table 视图单元格 select 方法无法正常工作。
找到了!罪魁祸首是 self.hideKeyboardWhenTappedAround()
,这是我编写的用于隐藏键盘的扩展。这干扰了细胞的点击,因为它确实利用了 UITapGestureRecognizer
。谢谢大家指点。
在您上传的图片中,代理和数据源未连接到 ViewController。
删除 viewdidload (tableview.delegate = self) 中的代码并在故事板中连接它们。
我无法让 didSelectRowAt
方法在常规 ViewController
中为 TableView
工作。我已经确保在 ViewController
代码中设置了 table 的 delegate
和 data source
。此 ViewController
使用搜索查询的结果填充 tableview
单元格到 API,单元格数据的呈现工作正常。
只是didSelectRowAt
方法没有注册。我确实尝试在 Main.storyboard 上手动添加相同的委托信息,但是 +
小符号不会触发任何弹出窗口 windows。我想知道 Main.storyboard
中是否有需要修复的内容。我还附上了 ViewController
和 TableView
连接检查器的图像。我是 iOS 开发的新手,在移动设计的图形界面方面没有太多经验,所以我假设它在那里,但也许我错了。
这是我的代码的基本版本:
class SearchViewController: UIViewController, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
@IBOutlet var searchBar: UISearchBar!
...variable declarations ....
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardWhenTappedAround()
searchResults = []
searchBar.delegate = self
tableView.dataSource = self
tableView.delegate = self
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults!.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "searchTableViewCell", for: indexPath) as! SearchTableViewCell
if(searchActive && !(self.searchResults?.isEmpty)!) {
(doing some stuff with search results here...works fine)
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("hello!")
}
func searchBar(_ searchBar: UISearchBar,
textDidChange searchText: String) {
print("search text \(searchText)")
getSearchResultJSON(term: searchText) { json in
let data = json as! [Dictionary<String, String>]
self.searchResults = data
}
self.tableView.reloadData()
}
...
}
[
[
编辑: 作为对搜索异步函数是否正在更改任何内容的完整性检查,我只是尝试删除所有与搜索相关的代码并填充 table 视图一个硬编码的虚拟变量数组。它可以显示虚拟变量,但仍然无法 select 一个单元格并得到任何反应。我还看到有几个人提到我之前用 didDeSelectRowAt 而不是 didSelectRow at 打错了字,现在已经修复但行为是一样的。
这最终与我编写的 hideKeyboardWhenTappedAround() 扩展中出现的点击手势有关
您正在使用 didDeselectRowAt
而不是 didSelectRowAt
编辑
好吧,下面就用这个delegate然后
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
并使您的控制器符合 UIGestureRecognizerDelegate
如果您在主视图上使用点击手势,那么 table 视图单元格 select 方法无法正常工作。
找到了!罪魁祸首是 self.hideKeyboardWhenTappedAround()
,这是我编写的用于隐藏键盘的扩展。这干扰了细胞的点击,因为它确实利用了 UITapGestureRecognizer
。谢谢大家指点。
在您上传的图片中,代理和数据源未连接到 ViewController。 删除 viewdidload (tableview.delegate = self) 中的代码并在故事板中连接它们。