如何将目标操作添加到 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的主要内容,如果未能解决你的问题,请参考以下文章

VC中如何将添加到资源的文件保存到目标位置?

创建后如何将通知场景添加到 WatchKit 目标?

如何将 Ivy 的依赖项添加到 Eclipse PDE 目标平台?

如何将 UWP 目标添加到现有 Xamarin Forms 项目?

如何确定文件是不是已复制到目标

如何将“安装”目标添加到 Xamarin.UWP .csproj 文件?