ナビゲーション バーの右上隅にそれぞれログイン ボタンが必要な 2 つの viewController があります。
viewController1#viewDidLoad では、次のように設定しましたrightBarButtonItem
(省略):
// set up the login button on the right
UIButton *loginButton = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *loginImage = [UIImage imageNamed:@"btn_login.png"];
[loginButton setBackgroundImage:loginImage forState:UIControlStateNormal];
[loginButton setFrame:CGRectMake(0, 0, loginImage.size.width, loginImage.size.height)];
[loginButton setTag:1111111];
UIBarButtonItem *loginItem = [[UIBarButtonItem alloc] initWithCustomView:loginButton];
self.navigationItem.rightBarButtonItem = loginItem;
[loginItem release];
でタグ付けしてviewWillAppear
、viewWithTag:1111111
ユーザーがログインしているかどうかに基づいて、非表示にする必要があるか表示する必要があるかを判断できるようにします。簡単です。
((UIButton *)[self.navigationController.view viewWithTag:LOGIN_BUTTON_TAG]).hidden = true;
viewController2 がスタックにプッシュされると、基本的に同じコードを実行して をセットアップしますrightBarButtonItem
が、別のタグ (つまり 222222) を付けます。
viewController2#viewWillAppear で、 を探すと、viewWithTag:222222
null として返されるため、表示/非表示を切り替えることができません。
しかし、viewController1 で使用したのと同じタグ (1111111) を使用すると、そこに到達できることに気付きました。
どうしてこれなの?私のタグは実際には定数としてファイルの先頭に設定されているため、これを機能させるために乱数を vc1 から vc2 にコピーするのはエレガントではないようです。rightBarButtonItem
代わりに、vc2 のタグが に適用されない理由と、別の viewController にいるにもかかわらず vc1 のタグがまだ保持されている理由を理解したいと思います。