にターゲットとしてparentClassを追加し、私はこれが正常に動作しますが、警告UIButton
で「いいえ方法はObjective-Cのセレクタと宣言されていない
likeBtnClicked
.TouchUpinside
上likeButton.addTarget(self.superview, action: "likeBtnClicked:", forControlEvents: UIControlEvents.TouchUpInside)
を呼び出しますUIButton
likeButton
を、しました"
likeButton
は、「いいね!ボタン」を使用したい一つのクラス(MyClassのことを言う)、私は
likeButton.addTarget(Myclass, action: #selector(Myclass.likeBtnClicked), forControlEvents: UIControlEvents.TouchUpInside)
に置き換えているだろう。しかし、それは複数のクラス(viewControllers)のために働くようにする方法で実装されている場合警告なしで??この質問は、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がsuperviewが特定のメソッドを実装していると仮定するのは悪い考えです。 – Paulw11
ありがとう:) @ Paulw11 –