4

非表示の属性を切り替えることで、2つのビューを切り替えています。1つのビューが非表示または表示されるかどうかをどのように知ることができますか?

ブレークポイントをviewDidLoad、viewDidUnload、viewWillAppear、viewWillDisappear、viewDidDisappear、becomeFirstResponder、およびresignFirstResponderに設定しようとしました。何もない。hidden = YES / NOに設定すると、これらは呼び出されません。

if (self.aController)
    self.aController.view.hidden = YES;
if (self.bController)
    self.bController.view.hidden = NO;
[self.bController viewWillAppear:YES];

そのビューは...UITabBarItemの下のビューのサブビューのサブビューであるため、私は自分でviewWillAppearを呼び出します。Appleのドキュメントによると、セットアップは不自然であり、一部の自動通知は手動で行う必要があります。これは、非表示のステータスに関連しているはずのbecomeFirstResponderとresignFirstResponderを取得しない場合と同じ問題ですか?

4

2 に答える 2

3

1つのオプションは、Key-Value監視hiddenを使用して、いずれかのビューのプロパティを監視することです。変更がトリガーされると、変更に関するメッセージが表示されます。

于 2010-02-18T15:28:33.823 に答える
3

Appleのドキュメントが正しかったと思います-または少なくとも問題を解決するための1つの方法を提供しました。subViewsでは自動通知を受け取りませんが、mainViewでは受け取りますので、通知を自分で「転送」するだけです。

- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

// called at tab switch
if (self.aController)
    [self.aController viewWillAppear:YES];
if (self.bController)
    [self.bController viewWillAppear:YES];
}

- (void) viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];

// called at tab switch
if (self.aController)
    [self.aController viewWillDisappear:YES];
if (self.bController)
    [self.bController viewWillDisappear:YES];
}

これが「正しい」方法であるかどうかはわかりませんが、機能します。次の問題をお願いします!

于 2010-02-18T15:31:28.483 に答える