无法让 didSelectRowAt 为 TableView 工作
Posted
技术标签:
【中文标题】无法让 didSelectRowAt 为 TableView 工作【英文标题】:Can't get didSelectRowAt to work for TableView 【发布时间】:2017-01-06 05:23:40 【问题描述】:我无法让didSelectRowAt
方法在常规ViewController
内为TableView
工作。我已经确保表格的delegate
和data source
设置在ViewController
代码中。这个ViewController
使用来自API 的搜索查询的结果填充tableview
单元格,并且单元格数据的呈现工作正常。
只是didSelectRowAt
方法没有注册。我确实尝试在 Main.storyboard 上手动添加相同的委托信息,但小 +
标志不会触发任何弹出窗口。我想知道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()
...
[]
[]
编辑: 作为对搜索异步函数是否正在更改任何内容的完整性检查,我只是尝试删除所有与搜索相关的代码并从硬编码的虚拟变量数组中填充表格视图。它可以显示虚拟变量,但仍然无法选择单元格并获得任何反应。我还看到一些人提到我之前使用 didDeSelectRowAt 而不是 didSelectRow at 有一个错字,该错误已得到修复,但行为是相同的。
这最终与我编写的 hideKeyboardWhenTappedAround() 扩展中发生的点击手势有关
【问题讨论】:
尝试去掉viewdidload方法中的delegate声明,并在storyboard中设置tableview的delegate 您是否在表格单元格上使用过任何轻触或按钮? 你正在使用 didDeselectRowAt 方法。 大获成功@Niharkia !但是我解决了这个问题,问题仍然存在 @Mr.Bista 不,没有轻触或按钮,尽管我意识到如果是这样的话这可能是问题 【参考方案1】:找到了!罪魁祸首是self.hideKeyboardWhenTappedAround()
,这是我为隐藏键盘而编写的扩展。这干扰了单元格的点击,因为它确实使用了UITapGestureRecognizer
。谢谢大家的提示。
【讨论】:
【参考方案2】:您使用的是didDeselectRowAt
而不是didSelectRowAt
编辑
那么,在委托下面使用这个
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
return true
并使您的控制器符合UIGestureRecognizerDelegate
【讨论】:
我希望我能说这就是答案,因为它非常有意义!但我刚刚进行了编辑,单元格仍然没有响应选择 单击单元格时看不到“hello”打印? 不,没有打印消息@Matt 您是否使用过任何手势,例如点击、平移? 是的!找到了。 UITapGestureRecognizer 用于我编写的用于隐藏键盘的扩展,使用 self.hideKeyboardWhenTappedAround() 调用。修复此方法解决了该问题。谢谢!【参考方案3】:如果您在主视图上使用点击手势,那么表格视图单元格确实选择方法无法正常工作。
【讨论】:
【参考方案4】:在您上传的图片中,委托和数据源未连接到 ViewController。 删除 viewdidload (tableview.delegate = self) 中的代码,并在 storyboard 中连接它们。
【讨论】:
以上是关于无法让 didSelectRowAt 为 TableView 工作的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 中的“didSelectRowAt indexPath”问题
未调用 UiTableView didSelectRowAt 方法
Swift 4:没有调用 didSelectRowAt 委托