[英]Hide BarButton item from Navigation Controller of TabBarController
我有一个tabBarController,其中包含三个选项卡。 我只想在第一个ViewController中向导航栏显示rightBarButtonItem,但是当我回来时,我希望它再次可见。 如何实现呢?
我试图为BarButtonItem设置enabled = NO,但是效果不好。
当视图改变时,我也尝试将BarButtonItem设置为nil,但是当我回来时,消失了。
我将BarButtonItem从viewDidLoad移到了viewWillAppear,但是它不能正常工作。
这是将rightBarButtonItem插入第一个ViewController的viewDidLoad中的代码。
UIImage *refreshButtonImage = [UIImage imageNamed:@"9B_Info.png"];
UIImage *refreshButtonImageB = [UIImage imageNamed:@"9A_Info.png"];
UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
[refreshButton setImage:refreshButtonImage
forState:UIControlStateNormal];
[refreshButton setImage:refreshButtonImageB
forState:UIControlStateHighlighted];
[refreshButton setImage:refreshButtonImageB
forState:UIControlStateSelected];
refreshButton.frame = CGRectMake(0, 0, 30, 30);
[refreshButton addTarget:self
action:@selector(showImageInfo)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *refreshBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:refreshButton];
self.refreshBtn=refreshBarButtonItem;
[self.tabBarController.navigationItem setRightBarButtonItem:self.refreshBtn];
您是否以编程方式使用情节提要或全部? 尝试这个:
1-打开新项目(单个视图)
2-进入情节提要->添加导航控制器
3-删除表视图控制器
4-将导航控制器设置为启动控制器(拖动将视图控制器指向导航控制器的箭头)
5-将视图控制器设置为导航控制器的根视图控制器
6-完成您的代码和@Apurv的解决方案
替换下面的行:
[self.tabBarController.navigationItem setRightBarButtonItem:self.refreshBtn];
用这行:
[self.navigationItem setRightBarButtonItem:self.refreshBtn];
当您只想将其显示为viewController时,请勿将其添加到tabBarController中。
如果将来有人提出这个建议,那么对我有用:
在第一个视图控制器中,我将此添加到viewWillAppear
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"!!!!");
UIImage *refreshButtonImage = [UIImage imageNamed:@"9B_Info.png"];
UIImage *refreshButtonImageB = [UIImage imageNamed:@"9A_Info.png"];
UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
[refreshButton setImage:refreshButtonImage
forState:UIControlStateNormal];
[refreshButton setImage:refreshButtonImageB
forState:UIControlStateHighlighted];
[refreshButton setImage:refreshButtonImageB
forState:UIControlStateSelected];
refreshButton.frame = CGRectMake(0, 0, 30, 30);
[refreshButton addTarget:self
action:@selector(showImageInfo)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *refreshBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:refreshButton];
self.refreshBtn=refreshBarButtonItem;
[self.tabBarController.navigationItem setRightBarButtonItem:self.refreshBtn];
}
在viewWillAppear方法的第二个View Controller中,这是:
self.tabBarController.navigationItem.rightBarButtonItem=nil;
问题在于,每个进入TabBarController的viewController的viewDidLoad仅被调用一次,但是每次viewController出现时都会调用viewWillAppear。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.