Подтвердить что ты не робот

Удаление элемента правой кнопки панели из элемента навигации

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

self.navigationItem.rightBarButtonItem = nil;

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

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

4b9b3361

Ответ 1

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

Ответ 2

Я знаю три способа: (суппозиция в правой части)

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

  • else, если у вас есть только одна кнопка на панели self.navigationItem.rightBarButtonItem = nil

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

Ответ 3

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)
}

Ответ 4

Я решил это, создав новый rightBarButtonItem.

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

@property (nonatomic, strong) UIBarButtonItem *clearRightButtonItem;

Synthesize:

@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;

Ответ 5

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

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

    self.navigationItem.rightBarButtonItem = nil;

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

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

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

Ответ 6

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

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

Это сработало для меня, вместо того, чтобы устанавливать кнопку в viewWillAppear, я установил ее в функции navigationController:willShowViewController:animated: в предыдущем 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];
    }
}

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

Свифт 3/4:

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

Ответ 10

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

self.navigationItem.rightBarButtonItem = nil;

и это не сработало, тогда я заметил, что я не вызывал это из основного потока.