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

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

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

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

У меня есть ссылка на кнопку через IBOutlet, но я не уверен, как двигаться дальше отсюда. Для справки это экземпляр UIBarButtonItem.

4b9b3361

Ответ 1

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

NSMutableArray     *items = [[myToolbar.items mutableCopy] autorelease];
[items removeObject: myButton];
myToolbar.items = items;

Ответ 2

Задайте элемент панели равным нулю.

Например:

self.navigationItem.leftBarButtonItem = nil;

Ответ 3

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

  • Я добавил UIBarButtonItem как свойство в моем UIViewController класс. Я создаю его в Метод initWithNibName.

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

  • Я установил свойство UIBarButtonItem на нуль, когда пользователь будет набирать текст.

Он работает как шарм. Я добавляю примеры кода ниже.

Сначала создайте экземпляр кнопки в моем методе инициализации контроллера:

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

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

self.navigationItem.rightBarButtonItem=[self barButtonItemDone];

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

self.navigationItem.rightBarButtonItem=nil;

Ответ 4

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

self.navigationItem.hidesBackButton = YES;

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

hidesBackButton

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

@property (неатомный, назначить) BOOL hidesBackButton

Обсуждение

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

Наличие

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

Ответ 5

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

Чтобы скрыть:

myButton.width = 0.1;

Чтобы показать:

myButton.width = 0.0;

Ширина 0.0 - это "автоматическая ширина", а с шириной 0,1 кнопка полностью исчезает (даже не "щепка" кнопки, хотя я не пробовал это на экране сетчатки).

Ответ 6

Другое хакерское решение:

myButton.customView = [[UIView alloc] init];

Ответ 7

Лучшим решением для этого является менее технический. Все, что вам нужно сделать, это создать обычную панель навигации (сверху) или панель инструментов (внизу), но без дополнительной кнопки. Затем создайте еще одну идентичную, но более короткую панель, которую вы затем поместите в ту часть, которая вам нужна, и создайте дополнительную кнопку на этой второй более короткой панели.

Теперь вы можете вызвать hidden = YES на всей дополнительной панели.

Бары легко перекрываются для меня, ваш пробег может меняться.

Ответ 8

Этот ответ касается текстовых UIBarButtonItems, однако эта же концепция может быть применена и к другим типам кнопок. Обратите внимание, что это позволит скрыть и снова отобразить элемент. Многие из приведенных выше ответов (например, при установке значения кнопки на ноль не разрешается повторная показ кнопки, если это необходимо).

TL; ДР:

if (shouldShowMyBarButtonItem) {
    self.myBarButtonItem.title = nil;
    self.myBarButtonItem.action = nil;
} else if (!shouldShowMyBarButtonItem) {
    self.myBarButtonItem.title = @"Title";
    self.myBarButtonItem.action = @selector(mySelector:);
}

Длинная версия:

UIBarButtonItem, который я пытался скрыть, находится в UIToolbar, а не в UINavigationBar, поэтому все предложения, касающиеся доступа к свойствам barButtonItem слева (или справа) в элементе навигации, не работают для меня. Кроме того, как указано выше, я хотел повторно показать кнопку при изменении обстоятельств.

Майкл предложил приблизиться к работе, однако, по крайней мере, с iOS 7, все еще была очень маленькая кнопка отображаемой кнопки, которая была поддающейся отображению. В моем приложении нажатие на элемент, когда оно не должно быть доступно, было неприемлемым. Вышеприведенный код скрывает и, главное, деактивирует кнопку.

Я вызываю вышеуказанный код в режиме частного обновления, который вызывается при возникновении пользовательского события.

Ответ 9

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

theButton.enabled = NO;
theButton.image = [UIImage imageNamed: @"Blank.png"];

Ответ 10

Ответ Бена технически корректен, хотя, когда я пытаюсь использовать его в своем пользовательском UIToolbar, элементы выделяются таким образом, что мне не нравится, потому что я использую элементы UIBarButtonSystemItemFlexibleSpace.

Если вы хотите, чтобы ваши другие предметы оставались в одном месте, вам нужно либо установить свои гибкие пространства в фиксированные пространства, либо попробовать то, что я сделал:

[filterBarButton.customView setHidden:YES];

note: это работает только в том случае, если ваш UIBarButtonItem использует пользовательские представления.

Ответ 11

Если вы добавите UIButton в UIBarButtonItem, а не просто используйте UIBarButtonItem.

Затем вы можете назначить UIButton.hidden на TRUE или YES, и он (и UIBarButtonItem) не будет виден или активен.

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

Ответ 12

Просто установите для скрытого свойства кнопки значение true:

myButton.hidden = YES;