1

我有一个包含 TableView 的 ViewController。我希望在每个单元格中都有一个执行某些操作的红色按钮(让我们说“你好”进行测试),或者当我在任何地方触摸单元格而不是在按钮上时,我会执行 segue。

但即使我触摸按钮,执行的还是 segue。我尝试在 SF 上进行一些搜索,但没有一个问题对我有帮助......

我不知道这是否正常,但是当我触摸单元格时,所有行的白色背景都变成灰色,甚至是红色按钮的背景。

在情节提要中,我有这个单元格层次结构:

单元格的层次结构

在单元格和按钮上都启用了用户交互。

在我发现他们说的问题中,在“披露指示器”上的单元格组“附件”上,我做到了,但如果可能的话,我想将其保持在“无”。我还为单元格设置了一个自定义类,代码如下:

class MyTableViewCell: UITableViewCell {   
@IBOutlet weak var rentButton: UIButton? // I use this class for 2 tableview almost similar, but in the other I don't have the redButton, that's why I put an '?'
}

我还将 tableView 的委托和数据源设置为我的 ViewController,这是我的视图控制器的代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! MyTableViewCell

    cell.rentButton!.tag = indexPath.row
    cell.rentButton!.addTarget(self, action: #selector(MyViewController.rent(_:)), forControlEvents: .TouchUpInside)

    return cell
}
// Rent() is never called:
func rent(sender: UIButton) {
    print("here \(sender.tag)")
}

编辑:解决方案是从 conainer 视图中取出按钮!

4

1 回答 1

1

当按钮被按下时,您可以通过以编程方式执行它来阻止 segue 动作。您可以执行以下操作:

  1. 删除从单元格到另一个视图控制器的 segue,并将其从 TableViewController 更改为另一个视图控制器

  2. 在 TableViewController 类中创建一个变量,例如: var buttonPressed = false

  3. 在您的按钮操作集 buttonPressed 为 true

  4. 在 didSelectRow 中,检查 buttonPressed 是否为 true,然后 performSegue 并将 buttonPressed 更改为 false,否则什么也不做

  5. 如前所述,将按钮从容器移动到内容视图

于 2016-04-09T11:34:20.050 回答