didSelectRowAt无法与我的UITableViewController

时间:2019-05-30 00:26:17

标签: ios swift uitableview

我的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的代码,但是根本没有调用该函数。

1 个答案:

答案 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
    }
}