我的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 :(得分:0)
您是否要向UITableView的超级视图提供UITapGestureRecogniser
,如果是这种情况,则UITableview的didSelectRowAt
方法将不起作用,因为您的超级视图接收的是触摸而不是表格视图单元格。
为此,您可以像这样将委托添加到UITapGestureRecogniser
中:
let tap = UITapGestureRecognizer(target: self, action: #selector(selectorFunction))
tap.delegate = self
superview.addGestureRecognizer(tap)
在此之后,使您的viewcontroller与此委托保持一致
extension YourViewController : UIGestureRecognizerDelegate
{
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if (touch.view?.isDescendant(of: yourTableView))!
{
return false
}
return true
}
}