2016-11-28 3 views
0

buttonTappedメソッドが実装されたButtonClassがあります。ボタンからビューコントロールにアクセスする

ボタン自体は表示されています。私は、ボタンが押されたときに余分なレイヤーを追加する必要がありますが、私はButtonClass内のセルにアクセスできません。なぜならselfはビューではなくボタンなので...私はviewControllerにあるself.viewにアクセスする必要がありますが、クラス。 viewController()のように新しいインスタンスを作成した場合、同じインスタンスではないので役に立たないでしょう。

+0

に私たちは、あなたの質問を理解しないだろう、ストーリーボード設計など – Santosh

+0

ますあなたのボタン 'superview'チェーンにアクセスすることができますが、ビューコントローラ内のメソッドをボタンから呼び出す、またはビューコントローラにアクションハンドラを置くために委譲パターンを使う方が良いでしょう – Paulw11

答えて

1

カスタムボタンクラスからbuttonTappedメソッドを追加する場合は、デリゲートを作成し、buttonTappedメソッドが呼び出されたときにデリゲートメソッドを呼び出す必要があります。

カスタムボタンクラスで

protocol YourCustomButtonDelegate { 
    func changeSomethingInTheView() 
} 

class YourCustomButtonClass { 

    var delegate: YourCustomButtonDelegate? 

    func buttonTapped(_ sender: AnyObject) { 
     if let delegate = delegate { 
      delegate.changeSomethingInTheView() 
     } 
    } 
} 

そして、あなたのコードのような詳細を入れない場合のViewController

class ViewController: UIViewController, CustomCellDelegate { 

    @IBOutlet weak var button: YourCustomButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     button.delegate = self 
    } 

    func changeSomethingInTheView() { 
     // write your code here... 
    } 
} 
+0

こんにちは@J。 Koush、あなたの答えをありがとう、私はそれを実装しようとしましたが、それは "Delegate = delegate {"が代理人が未解決の識別子であるために失敗した場合... – Marin

+0

@Marinあなたはカスタムボタンで代理変数を作成する必要がありますこのようなクラス 'var delegate:YourCustomButtonDelegate? –

+0

" button.delegate = self "throws 'はviewControllerを' buttonDelegate 'とタイプすることはできません.... – Marin

関連する問題