如何隐藏/显示导航栏中的右键

Lau*_*ell 38 objective-c uibarbuttonitem rightbarbuttonitem ios

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

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

NO GOOD: self.navigationItem.rightBarButtonItem.hidden = YES;  // FOO CODE
Run Code Online (Sandbox Code Playgroud)

有办法吗?

小智 73

通过将引用设置为nil来隐藏按钮,但是如果您想稍后恢复它,则需要挂起它的副本以便重新分配它.

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

//... later
self.navigationItem.rightBarButtonItem = oldButton;
[oldButton release];
Run Code Online (Sandbox Code Playgroud)

就个人而言,在我的应用程序中,我将导航按钮设置为@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;
Run Code Online (Sandbox Code Playgroud)


ric*_*chc 12

对于Swift 3

if let button = self.navigationItem.rightBarButtonItem {
                    button.isEnabled = false
                    button.tintColor = UIColor.clear
                }`
Run Code Online (Sandbox Code Playgroud)


小智 9

设置参考nil:

current_controller_in_navcontroller.navigationItem.rightBarButtonItem =  nil;
Run Code Online (Sandbox Code Playgroud)

另外一定要在navController当前显示的控制器中调用它,而不是navController本身.


小智 8

节目:

[self.navigationItem.rightBarButtonItem.customView setAlpha:1.0];
Run Code Online (Sandbox Code Playgroud)

隐藏:

[self.navigationItem.rightBarButtonItem.customView setAlpha:0.0];
Run Code Online (Sandbox Code Playgroud)

您甚至可以为其显示/隐藏设置动画

[UIView animateWithDuration:0.2 animations:^{
        [self.navigationItem.rightBarButtonItem.customView setAlpha:1.0];

    }];
Run Code Online (Sandbox Code Playgroud)


Hil*_*laj 8

如果右侧只有一个栏按钮项,则可以使用此一项,

self.navigationItem.rightBarButtonItem = nil;

假设您的右侧有多个栏按钮,例如,假设您的导航项的右侧有两个栏按钮项目(搜索按钮和过滤按钮)。现在右栏按钮项目是

self.navigationItem.rightBarButtonItems = [searchItem,filterItem]

你必须只隐藏搜索按钮,你可以使用像,

self.navigationItem.rightBarButtonItems = [filterItem]

现在发生的事情是,您可以从导航项中完全隐藏搜索按钮,并且过滤项出现在搜索项的位置


mma*_*ckh 5

这是Matt为Storyboards&ARC更新的解决方案.请记住,默认情况下,IBOutlets是__weak,因此您需要将其更改为strong,以免过早发布.

@interface MAGTableViewController () <UITextFieldDelegate>

@property (strong, nonatomic) IBOutlet UIBarButtonItem *rightBarButton;

@end

@implementation MAGTableViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.navigationItem setRightBarButtonItem:nil];
}

- (IBAction)rightBarButtonItemTapped:(id)sender
{
    [self.view endEditing:YES];
}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self.navigationItem setRightBarButtonItem:self.rightBarButton];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [self.navigationItem setRightBarButtonItem:nil];
}

@end
Run Code Online (Sandbox Code Playgroud)


Amr*_*gry 5

展示:

[self.navigationItem.rightBarButtonItem.customView setHidden:NO];
Run Code Online (Sandbox Code Playgroud)

隐藏:

[self.navigationItem.rightBarButtonItem.customView setHidden:YES];
Run Code Online (Sandbox Code Playgroud)