デリゲート メソッドを使用して、タッチがあったことを親ビュー コントローラーに伝える必要があるため、別のビュー コントローラーを表示できます。
サブクラス ヘッダーの先頭にUIView
、次を追加します。
@protocol MyCustomViewDelegate <NSObject>
- (void)customViewCircleTapped;
@end
次に、ビューの宣言 (カスタム ビュー サブクラスの既存の宣言) で:
@interface MyCustomView : UIView
...
@property (weak) id<MyCustomViewDelegate> delegate;
その後、View Controller で、view.delegate = self
ビューが View Controller を参照できるように を設定する必要があります。
次に、View Controller ヘッダーで、宣言を次のように変更します。
@interface MyViewController : UIViewController <MyCustomViewDelegate>
次にcustomViewCircleTapped
、View Controller 実装で実装します。
- (void)customViewCircleTapped {
... // Open a view controller or something
}
それが完了したら、ビューのタッチ検出コードに次を追加できます。
[self.delegate customViewCircleTapped];
これが何をするかというと、このメソッドを呼び出して (データを渡す必要がある場合は変更して引数を追加することができます)、ビュー コントローラーが別のビューを開くことができるようにすることで、カスタム ビューに何かが発生したことをその親ビュー コントローラーに通知する機能を与えることです。コントローラーまたはこれに基づいて何らかのアクションを実行します。
ビューがタッチを検出→タッチを処理customViewCircleTapped
→ビューコントローラーでデリゲートメソッドを呼び出す→ビューコントローラーが別のビューコントローラーを開く