我需要在导航栏中隐藏右键,然后在用户 Select 一些选项后取消隐藏.

不幸的是,以下方法不起作用:

NO GOOD: self.navigationItem.rightBarButtonItem.hidden = YES;  // FOO CODE

有办法吗?

推荐答案

通过将引用设置为nil来隐藏该按钮,但是如果以后要恢复该按钮,则需要保留该按钮的副本,以便重新分配该按钮.

UIBarButtonItem *oldButton = self.navigationItem.rightBarButtonItem;
[oldButton retain];
self.navigationItem.rightBarButtonItem = nil;

//... later
self.navigationItem.rightBarButtonItem = oldButton;
[oldButton release];

就我个人而言,在我的应用程序中,我把导航按钮变成@properties,这样我就可以扔掉&;随意重新创建它们,比如:

//mycontroller.h
UIBarButtonItem *rightNavButton;
@property (nonatomic, retain) UIBarButtonItem *rightNavButton;

//mycontroller.m
@synthesize rightNavButton;
- (UIBarButtonItem *)rightNavButton {
    if (!rightNavButton) {
        rightNavButton = [[UIBarButtonItem alloc] init];
        //configure the button here
    }
    return rightNavButton;
}

//later, in your code to show/hide the button:
self.navigationItem.rightBarButtonItem = self.rightNavButton;

Objective-c相关问答推荐

将 NSMutableAttributedString 转换为 NSString

如何判断 iPhone 现在在哪个位置(横向或纵向)?

当我们只能使用 NSObject 时,为什么还要使用 id?

等到多个网络请求都执行完毕 - 包括它们的完成块

将未知数量的行添加到静态单元UITableView

UIButton 标题更改为默认值

UITableView/UITableViewCell 点击事件响应?

如何追踪 SIGABRT 的原因

iOS UIImageView 缩小图像在 iPad 2 上产生锯齿图像

iOS 块和对自身的强/弱引用

将 Objective-C 指针类型NSString *转换为 C 指针类型CFStringRef(又名const struct __CFString *)需要桥接转换

isEqualTo: 和 isEqual 之间的区别:

调用了dismissViewControllerAnimated,但没有解除ViewController

Objective C - 为什么常量以 k 开头

将 NSArray 转换为 NSDictionary

当服务器上的图像文件更改时,我的应用程序中的 SDWebImage 缓存图像会发生什么情况?

代码问题:格式字符串不是字符串文字

如何设置 NSPredicate 来查找具有 nil 属性的对象

Objective-C 异常

如何在 NSUserDefaults 中保存 NSMutablearray