didSelectRowAt 不适用于我的 UITableViewController
Posted
技术标签:
【中文标题】didSelectRowAt 不适用于我的 UITableViewController【英文标题】:didSelectRowAt is not working with my UITableViewController 【发布时间】:2019-05-30 00:26:16 【问题描述】:我的 UITableVieController 有问题。它没有正确调用我的 didSelectRowAt 函数。我的 UITableView 中有多个部分,但我的代码的另一部分具有相同的确切代码工作得非常好,我不知道为什么这不起作用
我已经检查了我的表格视图是否具有正确的委托和数据源,并且确实如此。
override func numberOfSections(in tableView: UITableView) -> Int
return 2
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return section == 0 ? 1 : songList.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if indexPath.section == 0
let cell = tableView.dequeueReusableCell(withIdentifier: "InfoCell", for: indexPath) as! InfoCell
cell.playlistImage.image = playlistImage
cell.name.text = selectedPlaylist
cell.nuberOfSongs.text = "Number of Songs: \(playlistCount)"
return cell
else
let cell = tableView.dequeueReusableCell(withIdentifier: "SongCell", for: indexPath) as! SongCell
cell.SongTitle.text = songList[indexPath.row]
cell.SongArtist.text = artistList[indexPath.row]
cell.SongImage.image = imageList[indexPath.row]
return cell
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
if indexPath.section != 0
selectedItem = mediaList[indexPath.row]
play(selectedItem: selectedItem)
performSegue(withIdentifier: "showPlayer", sender: self)
tableView.deselectRow(at: indexPath, animated: true)
这是我用于创建部分和这些部分中的行的所有代码。它还包含 didSelectRowAt 的代码,但根本没有调用该函数。
【问题讨论】:
它不会做任何事情的唯一原因是因为您总是在第 0 部分选择一行 @MXNMike 为什么我总是在第 0 部分选择一行?delegate
没有真正设置,或者单元格上有视图阻止点击导致选择行。
这就是为什么它应该做任何事情的唯一原因,如果你说代理设置正确,如果你在你的检查行中放置一个断点,你是否命中了那个断点?
@DevAlphas 你能确保你的tableView 的allowsSelection
属性是true
吗? (developer.apple.com/documentation/uikit/uitableview/…)
【参考方案1】:
您是否为 UITableView 的父视图提供了 UITapGestureRecogniser
,如果是这种情况,那么 UITableview 的 didSelectRowAt
方法将不起作用,因为您的父视图正在接收触摸而不是 tableview 单元格。
为此,您可以像这样向您的UITapGestureRecogniser
添加一个代理:
let tap = UITapGestureRecognizer(target: self, action: #selector(selectorFunction))
tap.delegate = self
superview.addGestureRecognizer(tap)
在此之后,只需使您的视图控制器符合此委托
extension YourViewController : UIGestureRecognizerDelegate
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool
if (touch.view?.isDescendant(of: yourTableView))!
return false
return true
【讨论】:
以上是关于didSelectRowAt 不适用于我的 UITableViewController的主要内容,如果未能解决你的问题,请参考以下文章
Pickerview 选择行和 didSelectRowAt 函数