【发布时间】:2012-04-12 15:44:36
【问题描述】:
我有两个 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,以及为什么即使我在不同的 viewController 中 vc1 的标签仍然保留。
【问题讨论】:
-
我的第一个猜测是,在分配
tag和从tag获得视图之间,您在tag中添加了额外或更少的数字 -
我的第二个猜测(严重的一个)是 222222 导致一些整数溢出并将其变成 -123648 或其他东西。尝试使用较小的标签,例如 2222
-
我的标签实际上是 vc1 的 34590 和 vc2 的 234355。我只是用 1111111 和 222222 来明确这个问题,我在哪个 viewController 中。
-
请注意,第二个 no 有 6 位数字。试试五位数的号码。我认为限制是 2^16 = 65,536。第一个不小于这个,第二个是更多。更好的是,尝试使用 65535。更好的是,
NSLog它的值在比较之前 +1
标签: iphone objective-c ios uinavigationcontroller rightbarbuttonitem