Скрытие кнопки панели UINavigationItem - PullRequest
14 голосов
/ 04 августа 2009

Я добавил элемент BarButton слева от nav.bar через Interface Builder, и в коде я хочу, чтобы это отображалось только в режиме редактирования моего табличного представления. Но я не нашел ни одного скрытого свойства для установки leftBarButtonItem (например: self.navigationItem.leftBarButtonItem.hidden = YES).

Я могу установить только свойство enabled. Кто-нибудь знает, как управлять скрыть и показать свойство leftBarButtonItem, пожалуйста, помогите.

Ответы [ 10 ]

59 голосов
/ 11 ноября 2009

Это работает, я попробовал сам

self.navigationItem.leftBarButtonItem = nil;
self.navigationItem.hidesBackButton = YES;      
8 голосов
/ 04 августа 2009

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

self.navigationItem.leftBarButtonItem = nil;

Хотя это не идеальный ответ на ваш вопрос, так как это избавляет вас от кнопки, а не скрывает ее. Вам придется либо воссоздать его, либо оставить исходную кнопку и просто установить leftBarButtonItem обратно в UIBarButtonItem.

6 голосов
/ 11 октября 2016

У меня есть простая функция, чтобы сделать это. У меня есть такая навигация. Navigation Bar Он поставляется из Interface Builder, имеет фоновое изображение.

@IBOutlet weak var memberBtn: UIBarButtonItem!

Вы можете скрыть / показать это:

func hideMemberBtn() {
    memberBtn.isEnabled = false
    memberBtn.tintColor = UIColor.clear
}
func showMemberBtn() {
    memberBtn.isEnabled = true
    memberBtn.tintColor = UIColor.white
}

Это легко, но у меня работает. Вы можете изменить tintColor, как вам нужно. Надеюсь на помощь:]

4 голосов
/ 11 сентября 2014

Вы можете использовать

// Hide
self.navigationItem.leftBarButtonItem = nil;

// Show
self.navigationItem.leftBarButtonItem = self.myBarButtonItem

Ключ гарантирует, что у вас есть сильная ссылка на элемент кнопки перед тем, как обнулить leftBarButtonItem.

@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem;
3 голосов
/ 30 января 2013

Я только что создал свою собственную функцию «скрыть», показанную ниже:

- (void)hideClearButton:(BOOL)hide {

    if (hide) {
        self.navigationItem.leftBarButtonItem = nil;
    }
    else {
        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
                                                 initWithTitle:NSLocalizedString(@"Clear", @"Recents")
                                                 style:UIBarButtonItemStylePlain
                                                 target:self action:@selector(clearAll:)];

    }
}

Вы можете просто назвать это как:

[self hideClearButton:YES]; //hide it

или

[self hideClearButton:NO];  //show it
2 голосов
/ 04 августа 2009

В документации нет ничего, что подсказывало бы, что у элементов бара есть скрытое свойство.

Почему бы не установить

self.navigationItem.leftBarButtonItem = nil; 

когда пользователь не редактирует, тогда установите

self.navigationItem.leftBarButtonItem = whateverBarButtonItem; 

когда пользователь редактирует? Это требует либо повторного создания кнопки каждый раз, либо ее сохранения в течение жизненного цикла представления. Ни то, ни другое ужасно больно, но нет, не так просто, как скрытое свойство.

1 голос
/ 18 января 2014

Чтобы скрыть / отключить

[self.navigationItem.leftBarButtonItem setEnabled:FALSE];

Показать / включить

[self.navigationItem.leftBarButtonItem setEnabled:TRUE];
1 голос
/ 14 ноября 2012

Вы можете использовать

[self.navigationItem.leftBarButtonItem setEnabled:TRUE];

так как нет другого способа это скрыть. так что просто отключите его.

0 голосов
/ 09 апреля 2016

Это решение работает для меня

UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)];
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView];
self.navigationItem.leftBarButtonItem = btnL;
0 голосов
/ 16 апреля 2015

Ну, сделать ноль было невозможно, потому что я хотел показать его снова и не хотел снова создавать кнопку.

так что я сделал

 UIBarButtonItem *barButton =  (UIBarButtonItem *)self.navBar.topItem.leftBarButtonItem;
 barButton.customView.hidden = true;//Hide
 barButton.customView.hidden = false;//Show

У меня работает. (мой leftBarButtonItem был создан с использованием customView)

Надеюсь, это поможет.

...