Я работаю над приложением, которое включает в себя целую кучу кнопок, которые будут отформатированы одинаково - одинакового размера, макета, цвета, текстовых меток и т. Д. Аналогично тому, как оно работает с ячейками-прототипами вПредставления таблиц и представлений контейнеров. Я пытаюсь создать один экземпляр кнопки «прототип» в качестве пользовательского класса 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]
}
}