Swift - нажмите для просмотра контроллера из UIButton в CollectionViewCell - PullRequest
2 голосов
/ 14 апреля 2019

Я пытаюсь заставить мою кнопку при нажатии нажать на новый View Controller.Я пробовал много разных способов, но он не вызовет функцию, с которой он связан.Я также проверил трехмерный вид стека своих слоев, и кнопка находится сверху и активна, даже когда я проверяю цвет фона, он не покрывается ничем другим.

Есть ли у кого-нибудь какие-либо идеи относительно того, кто ячто-то не так?

Пока я пытаюсь заставить кнопку распечатать предложение в консоли, однако всякий раз, когда я нажимаю на нее, строка не появляется, поэтому я не удосужился подключить ее кконтроллера представления пока нет.

Кроме того, я кодирую это приложение без раскадровок.

Вот мой код ниже.

Он находится в классе MainPageCell, объявленном как 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")
}

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Эта строка неверна:

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

Невозможно назначить self в качестве цели действия в инициализаторе объявления свойства, поскольку экземпляр, обозначенный self, еще не существует.Нет ошибки или предупреждения (я считаю это ошибкой), но метод действия никогда не вызывается.

Переместите это назначение в другое место и перепишите его следующим образом:

self.playButton.addTarget(self, action: #selector(MainPageCell.buttonTapped), for: .touchUpInside)
0 голосов
/ 14 апреля 2019

Возможно, попробуйте определить действие вашей кнопки в классе UIView, у меня была такая проблема раньше, только когда я связал ее с классом просмотра, удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...