从导航项中删除右栏按钮项

时间:2011-05-23 22:28:18

标签: iphone objective-c cocoa-touch uibarbuttonitem

我在导航项中添加了一个右侧栏按钮项,并希望在某些条件下删除它。这就是我在做的事情:

self.navigationItem.rightBarButtonItem = nil;

但没有得到理想的行为。

我想隐藏它,但找不到任何方法。

10 个答案:

答案 0 :(得分:16)

你在做什么应该工作。我做了很多次。您确定要从正确的导航项中删除按钮吗? self是当前显示的UIViewController

答案 1 :(得分:8)

我知道三种方式: (在右侧加入)

  1. 如果您有多个条形按钮:
    self.navigationItem.rightBarButtonItems = nil

  2. 否则,如果您只有一个条形按钮
    self.navigationItem.rightBarButtonItem = nil

  3. 设置一个零按钮:
    self.navigationItem.setRightBarButtonItem(nil, animated: false)

答案 2 :(得分:3)

Swift 3 - 我在导航栏的左侧和右侧都有几个按钮,所以我使用以下方法隐藏它们:

func hideNavItems() {
  navigationItem.setLeftBarButtonItems(nil, animated: true)
  navigationItem.setRightBarButtonItems(nil, animated: true)
}

在我的情况下,我实际上需要在以后再次显示这些按钮,所以我将它们保存在一个数组中:

var leftNavItems: [UIBarButtonItem]!
var rightNavItems: [UIBarButtonItem]!

然后我只是调用一个函数来显示(重新添加)它们:

func showNavItems() {
  navigationItem.setLeftBarButtonItems(leftNavItems, animated: true)
  navigationItem.setRightBarButtonItems(rightNavItems, animated: true)
}

答案 3 :(得分:2)

我通过创建一个新的rightBarButtonItem来解决它。

创建属性:

@property (nonatomic, strong) UIBarButtonItem *clearRightButtonItem;

合成

@synthesize clearRightButtonItem = _clearRightButtonItem;

创建getter:

- (UIBarButtonItem *) clearRightButtonItem {
    if (_clearRightButtonItem == nil) {
        UIButton *rightButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 38, 38)];
        [rightButton setImage:nil forState:UIControlStateNormal];
        _clearRightButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
    }
    return _clearRightButtonItem;
}

然后使用new clearRightButtonItem设置rightBarButtonItem:

self.rightButtonItem = self.clearRightButtonItem;

答案 4 :(得分:1)

我的回答与此问题无关,但由于这是谷歌的最佳结果,因此我将贡献我的问题经验

我使用了rightBarButtonItem的项目数组,因此以某种方式使用

    self.navigationItem.rightBarButtonItem = nil;

我没有为我工作所以我做了一个空的barbutton项目并使用

将其设置为rightBarButtonItem
    [self.navigationItem setRightBarButtonItems:@[self.clearRightButtonItem]];

现在它消失了。

答案 5 :(得分:0)

将导航栏添加到实际上未嵌入导航控制器的视图控制器时,我遇到了这个问题。在这种情况下,self.navigationItem不是用于按住条形按钮的正确对象。我发现的工作(虽然您可能只是将视图控制器嵌入导航控制器)是为您在Interface Builder中添加的导航栏创建属性并正常链接它。在这种情况下,我将其命名为“navBar”。

然后你必须得到navBar的导航项而不是视图的导航项。在这种情况下,此代码似乎有效:

UINavigationItem *item = [self.navBar.items objectAtIndex:0];
item.rightBarButtonItem = nil;

答案 6 :(得分:0)

最近我遇到了同样的问题,我解决了这个问题(感谢Erik B.,你的回答激发了我的灵感!不幸的是我还不能投票给你答案)

我认为我的右键按钮无法消失,因为我在viewWillAppear函数中调用它,并且在该函数中self未被引用到当前UIViewController

这对我有用,而不是在viewWillAppear中设置按钮,我将其设置在上一个 navigationController:willShowViewController:animated:的{​​{1}}功能中。

例如,我从UIViewController拨打SecondViewController,我想隐藏FirstViewController中的右侧栏按钮,将其放入SecondViewController

FirstViewController.m

答案 7 :(得分:0)

使用以下代码对我有用:

self.navigationItem?.rightBarButtonItem = nil
navigationBar.items = [self.navigationItem!]

答案 8 :(得分:0)

Swift 3/4:

if let nav = self.navigationController {
   nav.navigationItem.setRightBarButtonItems(nil, animated: true)
   nav.navigationBar.topItem?.rightBarButtonItems = []
}

答案 9 :(得分:0)

对于其他人: 我也试过

self.navigationItem.rightBarButtonItem = nil;

它不起作用, 然后我注意到我没有从线程中调用它。