Кнопка не активна при программном добавлении в collectionviewcell - PullRequest
0 голосов
/ 05 декабря 2018

Когда я программно добавляю кнопку в пользовательский класс UICollectionViewCell, она не активируется и не запускает функцию, которую я к ней прикрепил.

Я уже пробовал:

, но не получилось.

В моем классе ячеек у меня есть:

let toggleButton: UIButton = {
    let tb = UIButton(type: .custom) as UIButton
    tb.setTitleColor(.white, for: .normal)
    tb.setTitle("Example", for: .normal)
    tb.titleLabel?.font = UIFont.customFont(name: "InterUI-Medium", size: 18)
    tb.backgroundColor = UIColor(red:0.36, green:0.69, blue:0.55, alpha:1.0)
    tb.layer.cornerRadius = 5
    tb.titleLabel?.adjustsFontSizeToFitWidth = true
    tb.titleLabel?.minimumScaleFactor = 0.4
    tb.translatesAutoresizingMaskIntoConstraints = false
    tb.addTarget(self, action: #selector(topButtonTouched), for: .touchUpInside)
    return tb
}()

и

func setupView() {
    self.addSubview(toggleButton)

    let menuAndToggleConstraints = [
        toggleButton.centerYAnchor.constraint(equalTo: self.centerYAnchor),
        toggleButton.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -100,
        toggleButton.widthAnchor.constraint(equalToConstant: 150)
    ]
    NSLayoutConstraint.activate(menuAndToggleConstraints)
}

override init(frame: CGRect) {
    super.init(frame: frame)
    setupView()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setupView()
}

для настройки кнопки в ячейке.Я попытался self.isUserInteractionEnabled, чтобы увидеть, есть ли какие-либо конфликты, но это ничего не решает.У меня есть еще один распознаватель жестов в ячейке, и я пробовал без него, и кнопка все еще не активна.

Редактировать: Вот мой делегат и моя функция, которая вызывает collectionView для изменения размера в indexPath:

weak var delegate: ExpandedCellDelegate?
public var indexPath: IndexPath!

@objc func topButtonTouched(_ sender: UIButton) {
    print("hello")
    if let delegate = self.delegate{
        delegate.topButtonTouched(indexPath: indexPath)
    }
}

Я удостоверился, что делегат и indexPath установлены как self в функции cellForRow в классе CollectionView, как показано в этого ответа .

1 Ответ

0 голосов
/ 05 декабря 2018

Мне удалось заставить кнопку работать, поместив это:

tb.addTarget(self, action: #selector(topButtonTouched), for: .touchUpInside)

в метод setupView () следующим образом:

func setupView() {
    self.addSubview(toggleButton)
    toggleButton.addTarget(self, action: #selector(topButtonTouched), for: .touchUpInside)

    let menuAndToggleConstraints = [
        toggleButton.centerYAnchor.constraint(equalTo: self.centerYAnchor),
        toggleButton.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -100,
                                               toggleButton.widthAnchor.constraint(equalToConstant: 150)
            ]
            NSLayoutConstraint.activate(menuAndToggleConstraints)
}

Не уверен, что это правильно, но работает.

...