cellView 中的按钮我不知道用户按下了哪个单元格
Posted
技术标签:
【中文标题】cellView 中的按钮我不知道用户按下了哪个单元格【英文标题】:button inside cellView I can't know which cell user pressed 【发布时间】:2016-08-25 09:31:24 【问题描述】:我在 tableView 中有自定义单元格
在里面我有一个按钮,我想当用户点击按钮时推送 viewController,我该怎么做以及如何知道哪个单元格用户使用它的按钮,因为这里不是didSelectRowAtIndexPath
【问题讨论】:
***.com/questions/19000356/… 的副本 @JJBoursier 我想要这个,你能帮我解释一下吗?我对objective-c一无所知 【参考方案1】:创建自定义按钮类
class CustomButton: UIButton
var indexPath: NSIndexPath!
在您的自定义单元格中创建 CustomButton 类型的按钮,在 cellForRowAtIndexPath
中添加以下行
cell.yourCustomButton.indexPath = indexPath
像这样定义IBAction
@IBAction func customButtonClicked(sender: CustomButton)
let indexPath: NSIndexPath = sender.indexPath
// Do whatever you want with the indexPath
【讨论】:
要访问sender.indexPath
,发件人应该是CustomButton类型。
已编辑。谢谢@SamM【参考方案2】:
在单元格中添加按钮标签并为您的转换功能添加目标
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier) as! CustomCell
cell.button.tag = indexPath.row
cell.button.addTarget(self, action: #selector( self.transitonMethod ), forControlEvents: UIControlEvents.TouchUpInside)
return cell
从发送者按钮的标签中获取 indexPath 并为该 indexPath 获取单元格。将控制器推到导航控制器上
func transitonMethod(sender: AnyObject)
let indexPath = NSIndexPath.init(index: sender.tag)
let cell = tableView.cellForRowAtIndexPath(indexPath)
self.navigationController?.pushViewController(yourController, animated: true)
【讨论】:
【参考方案3】:在tableview的cellforRow方法中:
1) 设置按钮的标签,例如yourButton.tag = indexpath.row
2) 设置按钮的目标方法,例如buttonPressed(sender:UIButton)
3) 现在在该目标方法中,您将通过 sender.tag 获得 indexpath.row
【讨论】:
【参考方案4】:按照ios 7 - How to get the indexPath from button placed in UITableViewCell 中的建议声明如下 IBAction:
@IBAction func didTapOnButton(sender: UIButton)
let cell: UITableViewCell = sender.superview as! UITableViewCell
let indexPath: NSIndexPath = self.tableView.indexPathForCell(cell)
// Do anything with the indexPath
或者其他方法:
@IBAction func didTapOnButton(sender: UIButton)
let center: CGPoint = sender.center
let rootViewPoint: CGPoint = sender.superview?.convertPoint(center, toView: tableView)
let indexPath: NSIndexPath = tableView.indexPathForRowAtPoint(rootViewPoint!)
print(indexPath)
然后使用那个 indexPath 来做任何你需要的事情。
【讨论】:
我在这个 UItableViewCell 类中写了但是我得到了错误,它说“没有成员“tableView” 您必须在包含 TableView 的 ViewController 中声明此方法... 1 - 在您的单元格中放置一个 UIButton,添加约束; 2 - 在包含 TableView 的 ViewController 中声明 IBAction 方法; 3 - 将按钮链接到单元格和单元格控制器内的任何图形(如设置标题); 4 - 将发送的事件链接到您通过情节提要声明 IBAction 的 ViewController; @JJBoursier 你的第一个方法不安全,因为它依赖于 tableViewCell 的架构,而且它也是错误的,因为sender.superview
不会让你得到单元格,它会带你到@987654325 @。要到达单元格,您需要向上走两层,例如 (sender.superview)?.superview
我刚刚将相关帖子翻译成 Swift。以上是关于cellView 中的按钮我不知道用户按下了哪个单元格的主要内容,如果未能解决你的问题,请参考以下文章
swift 3 在tableView 中按下了哪个单元格按钮