tableviewcell内的UIButton触发单元格而不是按钮

时间:2018-02-08 16:35:25

标签: ios swift uitableview uibutton

我有一个UITableViewCell,里面有一个按钮。 (通过IB制作)。

现在我想做的是:

  1. 按下UITableViewCell时,我想触发segue
  2. 按下UIButton时,我想触发操作。
  3. 然而,实际发生的情况是按下按钮时会选择UITableViewCell,而不是所需的结果。

    是否有办法同时启用两个操作?

    感谢。

    - 编辑

    我希望能够选择表格单元格,并且能够按下按钮。所以禁用选择是行不通的。

    - 根据要求,cellForRowAt:方法的代码

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: PersonTableViewCell.identifier, for: indexPath) as! PersonTableViewCell
    
        if ( indexPath.row < (self.searchResult.count)) {
            cell.configure(searchResult[indexPath.row])
        }
    
        return cell
    }
    

    然后,在cell的configure函数内部,在触发以下函数的按钮上创建UITapGestureRecognizer

    func follow(profile: User) {
        self.followButton.isSelected = !self.followButton.isSelected
        profile.toggleFollow(callback: { _ in })
    }
    

1 个答案:

答案 0 :(得分:2)

确保细胞内按钮的以下几点。

  1. 为您的按钮启用了用户互动
  2. 按钮具有适当的帧大小(可点击区域)
  3. 分配/连接到按钮
  4. 的有效按钮操作
  5. 按钮是最顶层的视图(没有其他视图覆盖按钮)
  6. 显示cellForRow(atIndex...和您的表格视图单元类的代码,以获得准确的解决方案。

    以下是示例代码:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomCell
        cell.yourbutton.isUserInteractionEnabled = true
        cell.yourbutton.addTarget(self, action: #selector(self.buttonTapped(sender:)), for: UIControlEvents.touchUpInside)
    
        //cell.bringSubview(toFront: cell.yourbutton)
        //cell.contentView.bringSubview(toFront: cell.yourbutton)
    
        return cell
    }
    
    
    @objc func buttonTapped(sender: UIButton) {
        print("button tapped")
    }
    

    编辑:Button有自己的控制操作/事件处理程序。您可能不需要添加UITapGestureRecognizer