У меня есть пользовательское представление, которое включает в себя представление стека. Внутри стека у меня есть метка и кнопка.
Я создал свой стек, метку и кнопку следующим образом и добавил их в родительский вид.
class HomeView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
translatesAutoresizingMaskIntoConstraints = false
addSubview(stackView)
stackView.addArrangedSubview(haveAccount)
stackView.addArrangedSubview(signin)
stackView.setCustomSpacing(4.0, after: haveAccount)
}
let stackView: UIStackView = {
let stack = UIStackView()
stack.translatesAutoresizingMaskIntoConstraints = false
stack.distribution = .fillProportionally
stack.alignment = .fill
stack.isUserInteractionEnabled = false
return stack
}()
let haveAccount: UILabel = {
let label = UILabel()
...
return label
}()
let signin: UIButton = {
let button = UIButton()
button.translatesAutoresizingMaskIntoConstraints = false
button.setTitle("Sign in", for: .normal)
button.titleLabel?.font = UIFont(name: "Avenir", size: 14)
button.setTitleColor(UIColor.white, for: .normal)
button.addTarget(self, action: #selector(HomeController.loginClicked(_:)), for: .touchUpInside)
return button
}()
}
В моем контроллере вида я добавляю вид к базовому виду контроллера и устанавливаю ограничения. Я также создаю метод, который должен вызываться при нажатии кнопки входа.
override func viewDidLoad() {
super.viewDidLoad()
homeView = HomeView()
homeView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(homeView)
homeView.fullscreenView(parentView: view)
}
@objc func loginClicked(_ sender: UIButton) {
print("sign in button pressed")
}
Когда я нажимаю кнопку, метод loginClicked не вызывается. Теперь я попытался переместить метод loginClicked в пользовательское представление и соответствующим образом изменить addTarget, и был вызван метод loginClicked. При этом я знаю, что кнопка является интерактивной, но я не думаю, что цель действия кнопки правильная, и поэтому метод loginClicked в контроллере представления не вызывается.