2017-06-30 5 views
2

私はコードを投稿できませんが、可能な限り私の問題を記述しようとします。私のカスタムビューのコントローラにカスタムIBActionを作成

カスタムスウィフトビューファイルをview.xibとして作成し、view.swiftにロードしました。そのファイルはXibです。 Xibはimageviewの上の単純なlabelです。 view.swiftファイルにIBOutletを作成できます。画像を切り替えるか、ラベルを変更してください。 view.swiftは単にUIViewに拡張されます。

これで、コントローラがあるStoryboardにこのビューを統合しました(otherVC.swiftと呼ぶことができます)。今すぐotherVC.swiftは、view.swiftがタッチされたという情報を得たいと思っています。 IBActionを設定しようとしましたが、設定するオプションはありません。ちょうどIBOutletです。いくつかのGoogeの後で、クラスUiControlIBActionを設定するそれらの機構があることが分かりました。

だから、view.swiftは、もはやUIViewを延長しなくても、UIControlになります。その後、タッチイベントでIBActionを作成できました。 (タッチダウンやタッチのような)シミュレータのビューでアプリケーションを実行すると、ビューをクリックできますが、IBActionは呼び出されません。

私の質問は、他のVCで自分のビューにIBActionを設定する方法、または特定のビューに対して自分自身のIBActionsを作成する方法です。

..コードをポストすることはできません。スニペットやリンクを歓迎します。

ありがとう!

+0

カスタムビューに 'UITapGestureRecognizer'を追加しようとしましたか? – byJeevan

+0

はい、私のビューが他のVCにタップされているコールを送信したいと思います。 – Offset

+0

その場合、 'Delegates'や' NSNotificationCenter'のようなオブザーバを使うことができます。 – byJeevan

答えて

2

カスタムIBAction(不可能ではないにしても)を作成するのは難しいと思うが、あなたの問題には代理人、通知、クローザーなどの多くのソリューションがあるので、クローサーを使用することをお勧めします。 。下のあなたはクローザー

class View { 
    var someButtonTapped: (UIButton) -> Void = {_ in } 

    @IBAction private func someButtonTappedAction(_ sender: UIButton){ 
     someButtonTapped(sender) 
    } 
} 

そして、あなたのコントローラで

objectOfYourCustomView.someButtonTapped = {sender in 
//handle action 
} 
0

と私はそれに基づいて答えています理解どのようなことを行うことができますどのようにコードがあります。 viewcontrollerでアクセスしたいビューのパブリックプロパティを作成します。 カスタムビューにアクセスできます。プロパティ名。 これが役立つことを願っています。

関連する問題