Удаление элемента правой кнопки панели из элемента навигации - PullRequest
22 голосов
/ 24 мая 2011

Я добавил элемент правой кнопки панели в свой элемент навигации и хочу удалить его при некоторых условиях. Вот что я делаю:

self.navigationItem.rightBarButtonItem = nil;

Но не получаю желаемого поведения.

Я хочу скрыть это, но не могу найти для этого никакого способа.

Ответы [ 10 ]

17 голосов
/ 24 мая 2011

То, что вы делаете, должно работать.Я делал это много раз.Вы уверены, что удаляете кнопку из правильного элемента навигации?self отображается в данный момент UIViewController?

8 голосов
/ 26 мая 2016

я знаю три способа: (с правой стороны)

  1. если у вас более одной кнопки панели:
    self.navigationItem.rightBarButtonItems = nil

  2. иначе, если у вас есть только одна кнопка бара
    self.navigationItem.rightBarButtonItem = nil

  3. установить нулевую кнопку:
    self.navigationItem.setRightBarButtonItem(nil, animated: false)

4 голосов
/ 17 мая 2017

Swift 5/4/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)
}
2 голосов
/ 15 октября 2012

Я решил это путем создания нового rightBarButtonItem.

Создать свойство:

@property (nonatomic, strong) UIBarButtonItem *clearRightButtonItem;

Синтез:

@synthesize clearRightButtonItem = _clearRightButtonItem;

Создать метод получения:

- (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;
}

А затем установите rightBarButtonItem с новым clearRightButtonItem:

self.rightButtonItem = self.clearRightButtonItem;
1 голос
/ 27 ноября 2014

Недавно я столкнулся с той же проблемой и решил ее (благодаря Эрику Б., ваш ответ вдохновил меня! К сожалению, я пока не могу проголосовать за ваш ответ)

Я думаю, что моя правая кнопка не может исчезнуть, потому что я вызвал ее в функции viewWillAppear, и в этой функции self не относится к текущей UIViewController.

Это сработало для меня, вместо того, чтобы установить кнопку в viewWillAppear, я установил ее в функции navigationController:willShowViewController:animated: на previous UIViewController.

Например, я звоню SecondViewController из FirstViewController и хочу скрыть правую кнопку в SecondViewController, введите это в FirstViewController.m:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    if ([viewController isKindOfClass:[SecondViewController class]]) {
        [viewController.navigationItem setRightBarButtonItem:nil];
    }
}
1 голос
/ 31 июля 2014

Мой ответ не относится конкретно к этому вопросу, но так как это лучший результат в Google, поэтому я поделюсь своим опытом с проблемой

Я использовал массив элементов для rightBarButtonItem, поэтому каким-то образом использовал

    self.navigationItem.rightBarButtonItem = nil;

не работал для меня, поэтому я сделал пустой элемент кнопки и установил его как rightBarButtonItem, используя

    [self.navigationItem setRightBarButtonItems:@[self.clearRightButtonItem]];

, и теперь его нет.

0 голосов
/ 11 марта 2018

Для других: Я тоже пробовал

self.navigationItem.rightBarButtonItem = nil;

и это не сработало, тогда я замечаю, что не вызывал это из main thread

0 голосов
/ 17 февраля 2018

Свифт 3/4:

if let nav = self.navigationController {
   nav.navigationItem.setRightBarButtonItems(nil, animated: true)
   nav.navigationBar.topItem?.rightBarButtonItems = []
}
0 голосов
/ 31 марта 2017

Это сработало у меня со следующим кодом:

self.navigationItem?.rightBarButtonItem = nil
navigationBar.items = [self.navigationItem!]
0 голосов
/ 25 августа 2014

У меня была эта проблема при добавлении панели навигации в контроллер представления, который фактически не встроен в контроллер навигации.В этом случае self.navigationItem не подходит для удержания кнопок панели.То, что я нашел, работает (хотя вам, вероятно, следует просто встроить viewcontroller в контроллер навигации), это создать свойство для панели навигации, добавленной в Interface Builder, и связать его как обычно.В этом случае я назвал это «navBar».

Затем вы должны получить элемент навигации navBar вместо элемента представления представления.В этом случае кажется, что этот код работает:

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