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的主要内容,如果未能解决你的问题,请参考以下文章