2009-08-04 2 views
14

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

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

ответ

7

Я уверен, что единственный способ «спрятаться» - это уничтожить его.

self.navigationItem.leftBarButtonItem = nil; 

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

+0

Спасибо за ваш ответ. Я тоже думал о таком подходе, если я не могу скрыться. – Sreehari

2

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

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

self.navigationItem.leftBarButtonItem = nil; 

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

self.navigationItem.leftBarButtonItem = whateverBarButtonItem; 

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

+0

Нейл избил меня до него - точно. –

55

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

self.navigationItem.leftBarButtonItem = nil; 
self.navigationItem.hidesBackButton = YES;  
+3

В некоторых случаях установка его на ноль не работала для меня, но настройка hidesBackButton на YES работала! Благодарю. –

+1

Настройка на nil позволит navItem следовать по умолчанию, чтобы показать кнопку «Назад», если вы находитесь в подпункте навигационного контроллера, поэтому вам также нужно установить hidesBackButton в true, если вы не хотите, чтобы что-либо показывало когда-либо – Nycen

+1

Я нахожу, что это не работает на 'viewDidLoad', но работает на' viewWillAppear: 'время. – ThomasW

1

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

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 

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

3

Я просто создал свой собственный "скрыть" функцию шоу ниже:

- (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 
1

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

[self.navigationItem.leftBarButtonItem setEnabled:FALSE]; 

Чтобы показать/включить

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 
+0

Правильно, но True и False также работают как шарм! – pkc456

+1

Достаточно честно. Просто подумайте, что привязка к объективному синтаксису C помогает читаемости. В этом случае это не имеет значения, я думаю. – Tander

4

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

// Hide 
self.navigationItem.leftBarButtonItem = nil; 

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

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

@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem; 
0

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

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

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

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

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

0

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

UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)]; 
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView]; 
self.navigationItem.leftBarButtonItem = btnL; 
0

У меня есть простой функции, чтобы сделать это. У меня есть такая навигация. Navigation Bar Он поставляется с интерфейсом 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 по мере необходимости. Надеемся на помощь:]

Смежные вопросы