У меня есть UIButton likeButton
, который будет вызывать likeBtnClicked
на .TouchUpinside
Добавление ParentClass в качестве мишени для UIButton
likeButton.addTarget(self.superview, action: "likeBtnClicked:", forControlEvents: UIControlEvents.TouchUpInside)
Это прекрасно работает, но с предупреждением
«Ни один метод не объявлена с Objective-C селекторе ».
Если likeButton
реализуется в одном классе (скажем MyClass), то я бы заменил его
likeButton.addTarget(Myclass, action: #selector(Myclass.likeBtnClicked), forControlEvents: UIControlEvents.TouchUpInside)
Но как заставить его работать на несколько классов (viewControllers), который хочет использовать «likeButton» без каких-либо предупреждений ??? Этот вопрос подходит для UITapGestureRecognizer.
Вот код образца:
import Foundation
class SubClass: UIView {
var likeButton = UIButton(frame: CGRectMake(0,0,100,50))
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(likeButton)
likeButton.addTarget(self.superview, action: "likeBtnClicked:", forControlEvents: UIControlEvents.TouchUpInside)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class SuperClassA: UIView {
let viewHavingBtn = SubClass(frame: CGRectMake(0,0,300,500))
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(viewHavingBtn)
}
func likeBtnClicked(sender: AAButton) {
print(sender.tag)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class SuperClassB: UIView {
let viewHavingBtn = SubClass(frame: CGRectMake(0,0,300,500))
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(viewHavingBtn)
}
func likeBtnClicked(sender: AAButton) {
print(sender.tag)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Вы должны использовать шаблон делегата. Плохая идея для вашего UiView предположить, что супервизор реализует конкретный метод. – Paulw11
Спасибо :) @ Paulw11 –