在iPhone中隐藏右侧导航栏按钮项

6
我想在视图控制器加载时隐藏rightNavigationBarItem。这可能吗?我尝试了这段代码,但它没有起作用。
self.navigationItem.rightBarButtonItem = nil;

你在哪些其他地方设置了 rightBarButtonItem?很可能它又被添加了,而此时视图已经显示出来了。 - Deepak Danduprolu
实际上,我已经创建了一个继承自UITabBarController的TabBar类。在这个类中,我添加了右侧的BarButton项。但是我只为一个类设置了RightBarButton,但当我运行程序时,RightBarButton也被设置为所有其他类。谢谢。 - Rani
嗯..所以你是在子类化 UITabBarController 还是 UITabBar?并且你是否将 TabBarController 放在 UINavigationController 中? - Deepak Danduprolu
我正在创建UiTabbarcontroller的子类。不,我没有把tabbarcontroller放入navigationcontroller中。 - Rani
为什么每个人都在质疑他为什么想要这样做?我有完全相同的需求。当与其他人/公司合作时,您并不总是对设计拥有控制权。 - Robert Wagstaff
7个回答

6
在 Xcode 4 中,使用这些方法将不起作用;
self.navigationItem.leftBarButtonItem.enabled=NO;
self.navigationItem.leftBarButtonItem=nil;
self.navigationController.navigationBar.backItem.hidesBackButton=YES;
[self.navigationItem.leftBarButtonItem release];

我很感兴趣您为什么提到rightBarButtonItem?在导航时,leftBarButtonItem会改变。
以下是可行的解决方案:
1) self.title =@""; 清空屏幕标题。当导航控制器推送详细视图到堆栈上时,不会创建返回按钮。
2) 替换leftBarButtonItem为其他内容可以更改按钮,但无法解决您的问题。
3) 另一种方法是隐藏导航栏:[self.navigationController setNavigationBarHidden:YES animated:YES];

@eSpecialized:这是不正确的。而且,他确实询问了正确的右侧按钮,你假设他不知道要隐藏哪个按钮是有点奇怪的。 - Henrik Erlandsson
@HenrikErlandsson - 因为当视图控制器加载时,除非它是导航堆栈的一部分,否则左右两侧都没有按钮。这个问题暗示他在左边按钮方面遇到了问题。也许应该对原始问题进行编辑。我理解的问题是导航堆栈推送,这意味着左侧按钮。 - Bill Thompson

5

您好,它不是隐藏而是使其失效。

 self.navigationItem.rightBarButtonItem.enabled = NO;

2
把这个函数放到所有的类中 -
  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    self.navigationItem.rightBarButtonItem = nil;
    }    return self;
}

2
首先,根据文档中明确说明的内容,你不应该子类化UITabBarController。这在概述中非常早就提到了。
假设其中一个选项卡指向UINavigationController。你应该直接访问视图控制器,并执行类似于viewController.navigationItem.rightBarButtonItem = nil;的操作。

1

直接隐藏右侧按钮无法生效,以下是解决方法。

注意:此解决方案仅适用于iOS 7.x。

//To Hide 
self.navigationItem.rightBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem.title = @"";

//To Show
self.navigationItem.rightBarButtonItem.enabled = YES;
self.navigationItem.rightBarButtonItem.title = @"DONE";

1

在将您的控制器插入导航栈之前,您应该将 rightBarButtonItem 设置为 nil。


0

我认为最好的方法是使用这行示例代码:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:nil style:UIBarButtonItemStylePlain target:nil action:nil];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接