Swift - 从 CollectionViewCell 中的 UIButton 推送到 ViewController

Posted

技术标签:

【中文标题】Swift - 从 CollectionViewCell 中的 UIButton 推送到 ViewController【英文标题】:Swift - Push to ViewController from UIButton in CollectionViewCell 【发布时间】:2019-04-13 23:12:22 【问题描述】:

我试图让我的按钮在被点击时推送到一个新的视图控制器。我尝试了许多不同的方法,但它不会触发我链接到的功能。我还检查了我的图层的 3D 堆栈视图,按钮位于顶部且可点击,即使我检查了背景颜色,它也没有被其他任何东西覆盖。

有人知道我做错了什么吗?

现在我正在尝试让按钮在控制台中打印出句子,但是每当我按下它时,字符串都不会弹出,所以我还没有费心将它连接到视图控制器。

另外,我正在编写没有情节提要的应用程序。

下面是我的代码。

它位于声明为 UICollectionViewCell 的 MainPageCell 类下

private let playButton: UIButton = 
    let button = UIButton()
    button.setTitle("", for: .normal)
    button.backgroundColor = .clear
    button.translatesAutoresizingMaskIntoConstraints = false
    button.addTarget(self, action: #selector(MainPageCell.buttonTapped), for: .touchUpInside)
    return button
()

@objc func buttonTapped() 
    print("I PRESSED THE BUTTON")

【问题讨论】:

副本是在表格视图中执行此操作,但在您调整正在使用的特定 API 后,在集合视图中执行此操作是相同的。 谢谢,但除了segue部分,我的第一个问题是为什么按钮在按下时甚至不能正常工作,它不会打印出打印语句 糟糕。重新打开。 您能补充更多细节吗?您是否要在集合视图单元格中添加按钮? 【参考方案1】:

这一行是错误的:

button.addTarget(self, action: #selector(MainPageCell.buttonTapped), for: .touchUpInside)

您不能将self 指定为属性声明初始化程序中的操作目标,因为self 指定的实例尚不存在。没有错误或警告(我认为这是一个错误),但从未调用过 action 方法。

将该作业移至别处并重写,如下所示:

self.playButton.addTarget(self, action: #selector(MainPageCell.buttonTapped), for: .touchUpInside)

【讨论】:

谢谢!这行得通!澄清一下,我不应该将动作目标放在 playButton 属性中,因为整个按钮还没有初始化?相反,假设我将它放在 viewDidLoad 中,或者在这种情况下,我将赋值放在覆盖 init.... 块中,这样,当加载按钮时,目标将初始化,因为实际上有一个按钮可以工作和。我想我明白我在这里做错了什么! 天啊,我至少花了一个小时调试这个问题。泰! @livingtech 是的,这很令人沮丧,不是吗?就像我说的,我认为这是一个错误。至少编译器应该警告你,“嘿,这不是你认为的那样!”【参考方案2】:

也许尝试在 UIView 类下定义你的按钮操作,我之前遇到过这样的问题,只有当我将它链接到视图类时才有效,祝你好运

【讨论】:

以上是关于Swift - 从 CollectionViewCell 中的 UIButton 推送到 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

从 swift 2.3 问题迁移到 swift 3.1

将代码从 Swift 2 更改为 swift 4

Alamofire - 从 Swift 2 转换为 Swift 3 时出错

从 Swift 2.3 迁移到 Swift 3 错误消息

从 Swift 2 转换为 Swift 3 时出错

项目在 Swift 中时无法从 Objective-C 访问 swift 类