2016-09-03 3 views
0

にターゲットとして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") 
    } 
} 
+0

デリゲートパターンを使用する必要があります。あなたのUiViewがsuperviewが特定のメソッドを実装していると仮定するのは悪い考えです。 – Paulw11

+0

ありがとう:) @ Paulw11 –

答えて

0

の手順は、次のとおり

1]というボタンを初期化でそのボタンにターゲットを追加]スーパークラスで

2 UIButtonオブジェクトを宣言するスーパークラス初期化メソッド

3]スーパークラスのタッチイベントのアクションメソッドを定義する

4]ボタンを表示するサブクラスのサブビューとしてボタンを追加します。

5]ボタンの操作を処理するサブクラスのスーパークラスからオーバーライドボタンのアクションメソッドを実装します。