我有两个 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 似乎不太优雅,只是为了让它工作。相反,我想了解为什么 vc2 的标签没有应用于rightBarButtonItem
,以及为什么 vc1 的标签仍然保留,即使我在不同的 viewController 中。