Пользовательские кнопки, импортированные из внешнего файла xib / nib, не реагируют на нажатие кнопок - PullRequest
0 голосов
/ 24 декабря 2018

Я работаю над приложением, которое включает в себя целую кучу кнопок, которые будут отформатированы одинаково - одинакового размера, макета, цвета, текстовых меток и т. Д. Аналогично тому, как оно работает с ячейками-прототипами вПредставления таблиц и представлений контейнеров. Я пытаюсь создать один экземпляр кнопки «прототип» в качестве пользовательского класса UIButton во внешнем xib-файле, который можно вставить в контроллер основного представления и повторить при необходимости.

У меня нет проблем с вводом кнопок, у меня не было проблем с настройкой текстовых меток и т. Д. Так что это не проблема, когда «прототип» не выводится правильно.

То, что не работает, - это нажатия кнопок.

У меня есть две кнопки - button1 и button2, которым назначены tag = 1 и tag = 2.Чтобы протестировать действие кнопки, я настроил оператор print, который выводит номер тега отправителя на консоль.

Если я создаю простую простую кнопку в основной раскадровке и даю ей номер тега, кнопка работает правильно.Но кнопки пользовательского класса ничего не отправляют на консоль.

Я пропустил шаг?Моя интуиция в том, что во внешнем xib есть дополнительная деталь, которую я пропускаю ... но я думаю, что специфические особенности (номера тегов и т. Д.) Должны быть связаны с каждым экземпляром, а не с прототипом.

    import UIKit

class ViewController: UIViewController {

@IBOutlet weak var button1: customButton!
@IBOutlet weak var button2: customButton!

override func viewDidLoad() {
    super.viewDidLoad()
    button1.customTitle.text = "This is Button 1"
    button2.customTitle.text = "This is Button 2"
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func buttonPressed(_ sender: UIButton) {

    print(sender.tag)

    }
}

РЕДАКТИРОВАТЬ: вот код из Xib, где генерируется кнопка.

import UIKit

class customButton: UIButton {

    @IBOutlet var contentView: UIView!
    @IBAction func buttonPressed(_ sender: UIButton) {
}

    override init(frame: CGRect) { // for using CustomView in code
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder aDecoder: NSCoder) { // for using CustomView in IB
        super.init(coder: aDecoder)
        commonInit()
    }

    private func commonInit() {
        Bundle.main.loadNibNamed("customButton", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }
}

1 Ответ

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

Теперь я вижу в вашем отредактированном ответе, у вас есть контент-представление, добавленное как подпредставление.Установите для своего состояния активации взаимодействия значение false, чтобы не беспокоиться о самих касаниях, и действие кнопки должно быть запущено.

В вашем файле кнопки, возможно, в commonInit:

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