Unc*_*ior 1 uibutton uitableview ios swift swift3
我有一个自定义 tableviewcell 并且当我单击按钮时,单元格内有按钮,下一个视图控制器不显示他的内容,但是如果我单击单元格然后单击按钮,下一个视图控制器显示正确的内容是我的代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! TableViewCell
cell.label.text = numberArray[indexPath.row]
cell.button.tag = indexPath.row
cell.button.addTarget(self,action:#selector(TableViewController.someAction(sender:)),
for:.touchUpInside)
return cell
}
Run Code Online (Sandbox Code Playgroud)
这是我的按钮操作:
func someAction(sender : UIButton){
self.performSegue(withIdentifier: "showDetail", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
这是我的转场功能:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow
{
(segue.destination as! ViewController).number = numberArray[indexPath.row]
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果您直接单击按钮,那么prepare(for:sender:)您现在正在indexPath使用的indexPathForSelectedRow单元格没有选择您需要的是将indexPath单元格的performSegue(withIdentifier:sender:).
func someAction(sender: UIButton) {
let point = sender.superview?.convert(sender.center, to: self.tableView)
if let indexPath = self.tableView.indexPathForRow(at: point!) {
//pass indexPath as sender with performSegue
self.performSegue(withIdentifier: "showDetail", sender: indexPath)
}
}
Run Code Online (Sandbox Code Playgroud)
现在在prepare(for:sender:)投的sender,以indexPath你们都好去。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = sender as? IndexPath
{
(segue.destination as! ViewController).number = numberArray[indexPath.row]
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果您忽略使用tag.
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |