どんな助けでも大歓迎です。
ビューがそのviewControllerの外部からロードされたことをプログラムで通知する方法を探しています。
メイン ビューに 5 つのボタンがあり、ビューが読み込まれてボタンが表示された後、別のファイル (その viewContrller の外) で読み込まれたことを通知したいとします。どのように/どこでこれを確認し、通知を受けることができますか?
アスペクト指向プログラミングを行う必要がありますか?
どんな助けでも大歓迎です。
ビューがそのviewControllerの外部からロードされたことをプログラムで通知する方法を探しています。
メイン ビューに 5 つのボタンがあり、ビューが読み込まれてボタンが表示された後、別のファイル (その viewContrller の外) で読み込まれたことを通知したいとします。どのように/どこでこれを確認し、通知を受けることができますか?
アスペクト指向プログラミングを行う必要がありますか?
NSNotificationCenterを使用します。クラス間でコミュニケーションをとることができます。
他のオブジェクト内でカスタムNSNotificationをリッスンします。ビューコントローラに、ライフサイクルのどの部分でも最も意味のある通知を投稿してもらいます(viewDidLoad、viewDidAppear ...)。
通知を投稿できない場合は、keyPathを監視することをお勧めします。たとえば、次のようなものをコントロールオブジェクトに配置して、次を実装できますobserveValueForKeyPath:
。
[viewController addObserver:self
forKeyPath:@"view"
options:NSKeyValueObservingOptionNew
context:NULL];
他の人が提案したように、通知または KVO でこれを行うことができますが、これは設計上の問題を強く示唆しています。ビュー コントローラーの内部ビューに直接アクセスしてはいけません。より深い質問は、なぜ知りたいのかということです。
私の経験では、最も可能性の高い原因は、他のオブジェクトにタイトルを設定させたり、変更を有効にしたりしていることです。これは MVC を壊し、おそらく修正しようとしている種類の問題につながります。これを処理する正しい方法は、さまざまなビュー コントローラー間で共有されるモデル オブジェクトにデータを配置することです。現在のビュー コントローラーは、モデルの変更を監視し、その UI 要素を適切に更新できます。
NSNotificationCenter またはデリゲート メソッドは、これを実現するための最も適切な方法です。