syds
syds

Reputation: 322

Swift - Push to ViewController from UIButton in CollectionViewCell

I am trying to make my button, when tapped, to push to a new View Controller. I've tried many different ways but it won't trigger the function that I have it linked to. I also checked the 3D stack view of my layers and the button is on top and clickable, even when I check the background color, it's not being covered by anything else.

Does anyone have any ideas to what I am doing wrong?

For now I am trying to make the button print out the sentence in the console, however whenever I press it, the string doesn't pop up, so I haven't bothered to connect it to the view controller yet.

Also, I am coding this app without storyboards.

Here is my code below.

It is under the MainPageCell class declared as a UICollectionViewCell

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")
}

Upvotes: 3

Views: 199

Answers (2)

matt
matt

Reputation: 535159

This line is wrong:

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

You cannot assign self as the action target in a property declaration initializer, because the instance designated by self does not exist yet. There is no error or warning (I regard that as a bug), but the action method is never called.

Move that assignment elsewhere and rewrite it, like this:

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

Upvotes: 4

Crashie
Crashie

Reputation: 19

Maybe try defining your button action under the UIView Class, I've had a problem like that before, only worked when i linked it to the View Class, Good luck

Upvotes: 0

Related Questions