ich ein UIButton habe likeButton
, die likeBtnClicked
auf .TouchUpinside
Hinzufügen Parent als Ziel UIButton
likeButton.addTarget(self.superview, action: "likeBtnClicked:", forControlEvents: UIControlEvents.TouchUpInside)
Dies funktioniert gut, aber mit Warnung
„Keine Methode deklariert mit Objective-C-Selektor nennen ".
Wenn likeButton
wird in einer Klasse implementiert (sagen MyClass), dann würde ich es ersetzt mit
likeButton.addTarget(Myclass, action: #selector(Myclass.likeBtnClicked), forControlEvents: UIControlEvents.TouchUpInside)
Aber wie es für mehrere Klassen (Viewcontrollers), die ‚Like‘ verwenden möchte funktioniert ohne irgendwelche Warnungen ?? Diese Frage gilt auch für UITapGestureRecognizer. Hier
ist der Beispielcode:
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")
}
}
Sie sollten ein Delegatenmuster verwenden. Es ist eine schlechte Idee für Ihr UiView anzunehmen, dass der Superview eine bestimmte Methode implementiert. – Paulw11
Danke :) @ Paulw11 –