无法在UINavigationItem中隐藏UIBarButtonItems

时间:2016-03-15 19:52:11

标签: objective-c uibarbuttonitem uinavigationitem

我目前有一个用Objective-C编写的自定义UINavigationController,它有一个实现

的rootViewController
- (UINavigationItem *)navigationItem

实现看起来像这样:

- (UINavigationItem *)navigationItem {
    UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Map Search"];

    item.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];

    UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btn_menu"] style:UIBarButtonItemStylePlain target:self action:@selector(leftBarButtonPressed:)];

    item.leftBarButtonItem = leftBarButtonItem;

    UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Other Button" style:UIBarButtonItemStylePlain target:self action:@selector(otherButtonPressed:)];
    item.rightBarButtonItem = rightBarButtonItem;

    return item;
}

这是正常工作,并按预期在我的rootViewController的导航栏中显示我的按钮。但是,当我尝试隐藏栏按钮项时,没有任何反应。我已经尝试将按钮设置为nil并创建UIBarButtonItem强属性以保持对我的按钮的引用以后返回到先前的状态,例如。

self.navigationController.navigationItem.rightBarButtonItem = nil;
...
self.navigationController.navigationItem.rightBarButtonItem = _strongPropertyUIBarButtonReference;

我也试过通过

引用按钮
self.navigationItem.rightBarButtonItem

我尝试使用alpha属性隐藏这些按钮。我已经尝试在我的自定义UINavigationController类中创建一个方法,将bar按钮项引用设置为nil。一切都无济于事。任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:0)

如果要在导航栏上添加按钮,可以创建UIBarButtonItem并将其传递给self.navigationItem.rightBarButtonItem。 当你想要隐藏这个栏按钮时,你只需直接将其设为零。这将隐藏按钮。 self.navigationItem.rightBarButtonItem = nil;

答案 1 :(得分:0)

我终于找到了解决方案。我必须做以下事情:

self.navigationController.navigationBar.topItem.leftBarButtonItem = nil;
self.navigationController.navigationBar.topItem.rightBarButtonItem = nil;

通过navigationBar的topItem是关键。然后,我使用强大的UIBarButtonItem属性恢复到初始未隐藏状态。