如何从单个tableViewcell获取多个按钮?

我在一个有4个按钮(选项)的tableView中进行测验,我在201,202,203,204这样的故事板上标记它们,并在tableView方法中成功地完成了所有这些测试。 但是在向按钮添加目标后,我无法在buttonClicked方法中获得特定按钮。

 func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return questions.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell (cell.viewWithTag(100) as! UILabel).text = "Q : " + (questions[indexPath.row].objectForKey("MocQuestion")! as? String)! (cell.viewWithTag(100) as! UILabel).font = themeFont (cell.viewWithTag(101) as! UILabel).text = questions[indexPath.row].objectForKey("Op1")! as? String (cell.viewWithTag(102) as! UILabel).text = questions[indexPath.row].objectForKey("Op2")! as? String (cell.viewWithTag(103) as! UILabel).text = questions[indexPath.row].objectForKey("Op3")! as? String (cell.viewWithTag(104) as! UILabel).text = questions[indexPath.row].objectForKey("Op4")! as? String let btn1 = (cell.viewWithTag(201) as! UIButton) let btn2 = (cell.viewWithTag(202) as! UIButton) let btn3 = (cell.viewWithTag(203) as! UIButton) let btn4 = (cell.viewWithTag(204) as! UIButton) // btn1.tag = indexPath.row * 100 + 0 // btn1.tag = indexPath.row * 100 + 1 // btn1.tag = indexPath.row * 100 + 2 // btn1.tag = indexPath.row * 100 + 3 btn1.addTarget(self, action: #selector(Quiz.buttonClicked(_:)),forControlEvents: UIControlEvents.TouchUpInside) btn2.addTarget(self, action: #selector(Quiz.buttonClicked(_:)),forControlEvents: UIControlEvents.TouchUpInside) btn3.addTarget(self, action: #selector(Quiz.buttonClicked(_:)),forControlEvents: UIControlEvents.TouchUpInside) btn4.addTarget(self, action: #selector(Quiz.buttonClicked(_:)),forControlEvents: UIControlEvents.TouchUpInside) return cell } func buttonClicked(sender:UIButton) { let tag = sender.tag print(tag) } 

在此处输入图像描述

如果您希望indexPath访问问题Array那么您可以尝试这样做。

 func buttonClicked(sender:UIButton) { let center = sender.center let point = sender.superview!.convertPoint(center, toView:self.tableView) let indexPath = self.tableView.indexPathForRowAtPoint(point) //Now you have tag of button check for that if (sender.tag == 201) { print("Option A") } else if (sender.tag == 202) { print("Option B") } else if (sender.tag == 203) { print("Option C") } else { print("Option D") } print(question[indexPath.row]) } 

为了获得每个问题单独的按钮click event您可以将唯一ID作为后缀或前缀,例如每个问题的20101或01201作为按钮的标记而不是硬编码。 然后获取标签并首先提取问题ID,然后按照问题进行检查。

swift 3你可以尝试吼一声

  1. 我的表格单元类

     class Custom_Cell: UITableViewCell { @IBOutlet weak var ButtonA: UIButton! @IBOutlet weak var ButtonB: UIButton! @IBOutlet weak var ButtonC: UIButton! } 
  2. 在表视图中设置标记

      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! Custom_Cell; cell.ButtonA.tag = indexPath.row; cell.ButtonB.tag = indexPath.row; cell.ButtonA.tag = indexPath.row; //Add Action Methods to UIButtons cell.ButtonA.addTarget(self, action: #selector(ButtonAAction), for: .touchUpInside) cell.ButtonB.addTarget(self, action: #selector(ButtonBAction), for: .touchUpInside) cell.ButtonA.addTarget(self, action: #selector(ButtonCAction), for: .touchUpInside) return cell; } 
  3. 按钮操作看起来像..

     func ButtonAAction(_ sender: Any) { //Get Button cell position. let ButtonPosition = (sender as AnyObject).convert(CGPoint.zero, to: tableView) let indexPath = tableView.indexPathForRow(at: ButtonPosition) if indexPath != nil { print("Cell indexPath: \(indexPath?.row)") } }