- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 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/
我对使用 self.navigationItem.rightBarButtonItem 和 self.navigationController.navigationItem.rightBarButto
我的导航栏上有一个简单的编辑按钮,单击后会变成“完成”,我正在尝试将“编辑”和“完成”上的文本更改为大写文本,这可能吗?有人知道我可以查看的教程吗? self.navigationItem.right
如何启用/禁用 navigationItem.rightBarButton 项目?我在 -viewDidLoad 调用以下代码,但它什么也没做。 self.navigationItem.rightBa
这似乎不起作用。我究竟做错了什么? -(void)awakeFromNib{ UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem a
谁能帮我理解我的代码有什么问题。我没有得到它,我的代码编译得很好,没有任何错误,但我的图像没有显示出来。我确定我的图像存在于 中 Assets 文件夹,我也给出了我的图像的正确名称。我正在以编程方式进
我的 viewController 作为一个容器运行,并且有自己的 UINavigationBar。它不在导航 Controller 中。我的导航栏项目是这样设置的...... self.naviga
我正在构建一个电子商务应用程序,在 rightBarButtonItem 中包含购物车。我已经实现了扩展以在每个 UIViewControllers 中添加购物车 barButtonItem。我的 b
我想在 segmentedControl 更改时隐藏/显示 UIBarButtonItem,这是我的代码: @objc fileprivate func handleSegmentedChange()
注意:我可以通过在我的 barbutton 和 barbutton2 方法中将 leftbarbuttonitem 切换为 rightbarbutton item 来实现它。我只是想知道为什么它不能正
右栏按钮项目未出现在导航栏的右侧。我希望导航栏看起来与“App Store”中的导航栏类似 我尝试在 Storyboard和代码中执行此操作,设置图像内容模式,剪切到边界,并给它一个框架。 我也一直在
这让我很烦恼!我只是想以编程方式向导航栏添加一个右侧“flash”按钮,但出于某种原因,我无法使其显示。我的代码如下。谁能帮我?提前致谢。 //Note: flashButton is declar
我在导航栏的 View 中有一个编辑 rightbarbuttonitem。我是在 Storyboard/IB 的帮助下设置的,而不是以编程方式设置的。现在,我想要的只是在按下“完成”barbutto
我有两个 View Controller ,每个 View Controller 都需要在导航栏右上角有一个登录按钮。 在 viewController1#viewDidLoad 中,我像这样设置了
我正在以编程方式创建 UINavigationController 并将我的 ViewController 添加到其中: // wrap in a navigation controller let
我的 UIViewController 中的问题是 rightBarButtonItem 没有垂直对齐。我想将按钮向下移动 10 个像素。 let cancelButton = UIBarButton
在导航栏中,我添加了两个右侧的 barButtonItems: [self.navigationItem setRightBarButtonItems:@[firstBarButton,secondB
尝试将刷新按钮显示为 rightBarButtonItem 时遇到一个奇怪的问题。 总之,我已经实现了,但是运行应用程序时什么也看不到。但是,当我单击 Storyboard Debug --> Vie
我想设置导航栏上“完成”按钮的颜色,如下图: 尽管我已将代码设置为 self.doneButton.enabled = NO; 但“完成”按钮仍然是白色。它不会像图像那样改变颜色。 如何设置代码来更改
我有一个 UIViewController 设置为在其 UINavigationItem 右侧显示一个信息按钮,如下所示: UIButton *infoButton = [UIButton butto
我正在尝试设置一个导航按钮,使其显示为红色和半粗体。我设法更改了颜色,但在将其更改为半粗体时遇到了问题: navigationItem.rightBarButtonItem = UIBarButton
我是一名优秀的程序员,十分优秀!