Как я могу динамично скрыть кнопку от представления?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

36
задан Tim B 8 December 2015 в 13:02
поделиться

6 ответов

При попытке скрыть UIBarButtonItem, необходимо будет на самом деле изменить содержание родительской панели. Если это будет UIToolBar, необходимо будет установить массив элементов панели на массив, который не включает объект.

NSMutableArray     *items = [[myToolbar.items mutableCopy] autorelease];
[items removeObject: myButton];
myToolbar.items = items;
54
ответ дан Ben Gottlieb 27 November 2019 в 05:22
поделиться

Просто установите скрытое свойство кнопки на истинный:

myButton.hidden = YES;
-13
ответ дан Ben Gottlieb 27 November 2019 в 05:22
поделиться

Установите элемент полосы на ноль

Например:

self.navigationItem.leftBarButtonItem = nil;
20
ответ дан 27 November 2019 в 05:22
поделиться

Это то, что я сделал для элементов кнопок, которые не были частью панели навигации (где Blank.png - это созданное мной пустое изображение, которое тот же размер изображения, которое оно заменяет):

theButton.enabled = NO;
theButton.image = [UIImage imageNamed: @"Blank.png"];
1
ответ дан 27 November 2019 в 05:22
поделиться

Итак, я попробовал победный подход Бена, но в итоге он оказался неверным для моих целей - хотя я уверен, что все зависит от того, что вы пытаетесь сделать. Я пытался показать кнопку навигационной панели только при определенных условиях, а затем скрыть ее, как только условие больше не выполняется (в моем случае это кнопка "Done", используемая для скрытия клавиатуры, связанной с UITextView. Она должна отображаться только тогда, когда пользователь набирает текст в текстовом представлении). Мои шаги были следующими:

  1. Я добавил UIBarButtonItem в качестве свойство в моем UIViewController класса. Я инстанцировал его в initWithNibName.

  2. Я назначил свойство UIBarButtonItem в качестве свойства rightBarButtonItem в навигационной панели, как только как только пользователь начинает вводить текст в текстовом представлении.

  3. Я установил свойство UIBarButtonItem на nil, когда пользователь заканчивает вводить текст.

Это работает как шарм. Ниже я добавляю несколько примеров кода.

Сначала я инстанцирую кнопку в методе init моего контроллера представления:

barButtonItemDone = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];

Затем я устанавливаю ее как кнопку правой панели в методе делегата, который вызывается, как только пользователь начинает редактировать текстовое представление:

self.navigationItem.rightBarButtonItem=[self barButtonItemDone];

Наконец, когда сама кнопка нажимается, вызывается метод под названием "done", и я просто устанавливаю rightBarButtonItem в nil внутри этого метода:

self.navigationItem.rightBarButtonItem=nil;
11
ответ дан 27 November 2019 в 05:22
поделиться

Если все, что нужно скрыть, это кнопку "Назад" в навигационной панели, есть более простой способ:

self.navigationItem.hidesBackButton = YES;

Цитата из документации разработчика:

hidesBackButton

Булево значение, определяющее, скрыта ли кнопка "Назад".

@property(nonatomic, assign) BOOL hidesBackButton

Обсуждение

Да, если кнопка назад скрыта, когда этот элемент навигации является верхним элементом; иначе НЕТ. элемент; в противном случае - НЕТ. Значение по умолчанию НЕТ.

Доступность

Доступно в iPhone OS 2.0 и более поздних версиях.

10
ответ дан 27 November 2019 в 05:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: