1. ホーム
  2. ios

[解決済み] UIViewからUIViewControllerへ?

2022-04-13 03:36:21

質問

を取得するビルトインの方法はありますか? UIView からその UIViewController ? から取得できるのは知っています。 UIViewController をその UIView を経由して [self view] が、逆参照はないのかなと?

どのように解決するのですか?

長い間、この回答が受け入れられてきたので、より良い回答で修正する必要があると感じています。

必要性についてのコメントもあります。

  • ビューは、ビューコントローラに直接アクセスする必要がないようにします。
  • その代わり、ビューはビューコントローラーから独立し、異なるコンテキストで動作できるようにする必要があります。
  • ビューがビューコントローラと何らかの形でインターフェースする必要がある場合、推奨される方法、そしてAppleがCocoaで行っている方法は、デリゲートパターンを使用することです。

以下に、その実装例を示します。

@protocol MyViewDelegate < NSObject >

- (void)viewActionHappened;

@end

@interface MyView : UIView

@property (nonatomic, assign) MyViewDelegate delegate;

@end

@interface MyViewController < MyViewDelegate >

@end

ビューは、そのデリゲートとインターフェイスします ( UITableView そして、その実装がビューコントローラにあるかどうか、 あるいは最終的に使用する他のクラスにあるかどうかは気にしません。

私の当初の回答は以下の通りです。 これはお勧めしませんし、ビューコントローラに直接アクセスする他の回答もお勧めしません。

ビルトインの方法はありません。を追加することで回避することができます。 IBOutlet の上に UIView を作成し、Interface Builderでこれらを接続することは推奨されません。ビューはビューコントローラのことを知るべきではないのです。その代わり、@Phil M が提案するように、デリゲートとして使用するプロトコルを作成する必要があります。