如何将目标操作添加到 UITableViewCell
Posted
技术标签:
【中文标题】如何将目标操作添加到 UITableViewCell【英文标题】:How to add a target action to a UITableViewCell 【发布时间】:2016-06-29 06:14:49 【问题描述】:我已经向特定的 UITableViewCell 添加了一个按钮。当我选择按钮时,我遇到了崩溃:
ButtonTapped
libc++abi.dylib: terminating with uncaught exception of type NSException
在cellForRowAt
的开头,我定义了按钮:
let myButton = UIButton(type: .custom)
myButton.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
myButton.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
myButton.tintColor = UIColor.yellow()
对于 indexpath.row,我像这样附加按钮:
cell.accessoryView = myButton as UIView
而buttonTapped
操作尝试加载不同的 ViewController。
我确认按钮操作有效(调用了例程)。 套路如下:
func buttonTapped()
print("ButtonTapped")
let myPickerController = self.storyboard?.instantiateViewController(withIdentifier: "picker") as? MyPickerController
print("1")
self.present(myPickerController!, animated: true)
print("2")
从日志中可以看出,我确实看到调用了例程,但在崩溃前我没有看到打印值 1 或 2。有人看到我做错了什么吗?
【问题讨论】:
记住表格视图单元格被重用;不确定每次添加一个新按钮是否明智。或许每个单元格已经有一个按钮,并且每次您将一个单元格出列时重新配置它。您可以使用nil
参数将所有目标/操作重置为 removeTarget...
:***.com/a/3340840/433373
好主意。我想我已经尝试过了,但我会检查
嗯。我已将按钮设置为全局变量。我称它为需要它的特定细胞。我可以看到按钮激活了该功能,但是我仍然崩溃了。欢迎其他想法。
哦,所以一次只有一个按钮。你说你在“cellForRowAt 的开头”实例化它,它在表格需要显示的每个单元格中调用一次。即使有一个按钮被重复使用,也请确保不要多次添加相同的目标。
糟糕。我是这样设置的,但我理解了你的观点并将创建按钮移动到 viewDidLoad。很抱歉造成混乱
【参考方案1】:
添加目标,
myButton.addTarget(self, action: #selector(YourControllerName.buttonTapped(_:)), for: .touchUpInside)
然后改变你的功能,
func buttonTapped(sender : UIButton)
....
希望对你有所帮助。
【讨论】:
谢谢吉格。第一行 (addTarget) 失败,`MyViewController' 类型的值没有成员 'myButtonTapped' ` 您是否在控制器中使用给定名称定义了方法?喜欢buttonTapped
我认为您的按钮操作在其他视图控制器中..?
“你是否在控制器中定义了具有给定名称的方法”.. 是的,按钮有效 - 我可以看到该函数被调用.. 崩溃就在那之后以上是关于如何将目标操作添加到 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Ivy 的依赖项添加到 Eclipse PDE 目标平台?