gpt4 book ai didi

iphone - 无法获取自定义 rightBarButtonItem

转载 作者:行者123 更新时间:2023-11-28 17:34:49 25 4
gpt4 key购买 nike

我有两个 View Controller ,每个 View Controller 都需要在导航栏右上角有一个登录按钮。

在 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 的标签仍然保留。

最佳答案

最简单、最具可扩展性的解决方案是避免像瘟疫一样使用 viewWithTag:

UIBarButtonItem 设为 ivar,然后您就可以立即访问它而不会产生任何歧义。

替换

[loginButton setTag:1111111];

self.loginButton = loginButton;

然后检索执行此操作

self.loginButton;

代替

(UIButton *)[[[self.navigationController visibleViewController] view] viewWithTag:LOGIN_BUTTON_TAG];

我知道哪个对我来说更优雅、更健壮

关于iphone - 无法获取自定义 rightBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10127086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com