【问题标题】:Swift - Push to ViewController from UIButton in CollectionViewCellSwift - 从 CollectionViewCell 中的 UIButton 推送到 ViewController
【发布时间】: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部分,我的第一个问题是为什么按钮在按下时甚至不能正常工作,它不会打印出打印语句
  • 糟糕。重新打开。
  • 您能补充更多细节吗?您是否要在集合视图单元格中添加按钮?

标签: ios swift uicollectionview


【解决方案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 类下定义你的按钮操作,我之前遇到过这样的问题,只有当我将它链接到视图类时才有效,祝你好运

【讨论】:

    猜你喜欢
    • 2019-09-14
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多