Я создал панель инструментов в IB с несколькими кнопками. Я хотел бы иметь возможность скрыть / показать одну из кнопок в зависимости от состояния данных в главном окне.
UIBarButtonItem
не имеет скрытого свойства, и любые примеры, которые я нашел до сих пор для сокрытия их, включают установку кнопок навигационной панели в ноль, что я не думаю, что я хочу здесь делать, потому что мне может понадобиться снова показать кнопку (не упомянуть, что, если я подключу свою кнопку к IBOutlet, если я установлю это на ноль, я не уверен, как я получу это назад).
Ответы:
Сохраните вашу кнопку в надежном магазине (давайте назовем ее
myButton
) и сделаем это, чтобы добавить / удалить ее:Поскольку он хранится в розетке, вы сохраните ссылку на него, даже если его нет на панели инструментов.
источник
Я знаю, что этот ответ опаздывает на этот вопрос. Тем не менее, это может помочь, если кто-то еще сталкивается с подобной ситуацией.
В iOS 7, чтобы скрыть элемент кнопки панели, мы можем использовать следующие два метода:
SetTitleTextAttributes
: - Это прекрасно работает с кнопками панели, такими как «Готово», «Сохранить» и т. д. Однако, это не работает с такими элементами, как «Добавить», «Корзина» и т. д. (по крайней мере, не для меня), поскольку они не являются текстами.TintColor
: - Если у меня есть элемент кнопки панели под названием «deleteButton»: -Чтобы скрыть кнопку, я использовал следующий код: -
Чтобы снова показать кнопку, я использовал следующий код: -
источник
deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()
отключить и скрыть, аdeleteButton.enabled = true; deleteButton.tintColor = nil
также включить и показать как обычно.UIColor.clear
дляUIControlState.disabled
и может показать / скрыть кнопку сsetEnabled
. Конечно, как вы сказали, это работает только для текстовых кнопок.Вот простой подход:
Я только что запустил его на своем сетчатке iPad, а 0,01 достаточно мал, чтобы он не появлялся.
источник
self.window?.tintColor = APP_PRIMARY_COLOR
в appdelegate, то это не сработаетМожно скрыть кнопку на месте, не меняя ее ширину и не удаляя ее с панели. Если вы установите простой стиль, удалите заголовок и отключите кнопку, он исчезнет. Чтобы восстановить его, просто отмените ваши изменения.
источник
Ниже мое решение, хотя я искал его для панели навигации.
Здесь «navBar» - это IBOutlet для NavigationBar в представлении в XIB. Здесь я хотел скрыть кнопку или показать ее в зависимости от некоторых условий. Так что я проверяю условие в «Если» и если true, я устанавливаю кнопку в ноль в методе viewDidLoad целевого представления.
Это может не относиться к вашей проблеме, но что-то похожее, если вы хотите скрыть кнопки на панели навигации
источник
rightBarButtonItem
снова, убедитесь , что пункт кнопки сохраняется в сильном IBOutlet так , что он не освобожден , когда вы берете его на панели навигации.Для Swift 3 и Swift 4 вы можете сделать это, чтобы скрыть
UIBarButtomItem
:И показать
UIBarButtonItem
:На
tintColor
вы должны указать цвет происхождения , который вы используете дляUIBarButtomItem
источник
В настоящее время я использую OS X Yosemite Developer Preview 7 и Xcode 6 beta 6 для iOS 7.1, и мне подходит следующее решение:
UINavigationItem
иUIBarButtonItem
сЗапустите следующий код, чтобы удалить
Запустите следующие коды, чтобы снова добавить кнопки
источник
Я использовал IBOutlets в своем проекте. Итак, мое решение было:
И когда вам нужно будет снова показать эту панель, просто установите обратные свойства.
В Swift 3 вместо этого
enable
используйтеisEnable
свойство.источник
self.dismissButton.customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
источник
iOS 8. UIBarButtonItem с пользовательским изображением. Пробовал много разных способов, большинство из них не помогало. Решение Макса
setTintColor
не меняло цвет. Я сам разобрался с этим, подумал, что он кому-нибудь пригодится.Для сокрытия:
Для показа:
источник
Попробуйте в Swift , не обновляйте,
tintColor
если у вас есть какой-то дизайн для вашего UIBarButtonItem, например, размер шрифта в AppDelegate, он полностью изменит внешний вид вашей кнопки при отображении.В случае текстовой кнопки, изменение заголовка может позволить вашей кнопке «исчезнуть».
источник
Я обнаружил еще одну морщинку в
tintColor
иisEnabled
подход , предложенный Макс и другие - когда функция VoiceOver включена для обеспечения доступности и кнопка логически скрыты, доступность курсор будет по- прежнему сосредоточены на панели кнопок, и заявить , что он «серым» (то есть , потому чтоisEnabled
ЭТО установить в ложь). Подход в принятом ответе не страдает от этого побочного эффекта, но я обнаружил, чтоisAccessibilityElement
при работе с «сокрытием» кнопки было установлено значение false:И затем,
isAccessibilityElement
возвращаясь к значению true, когда «показывает» кнопку:В моем случае не было проблем с тем, чтобы элемент панели кнопок занимал пространство, поскольку мы скрывали / отображали крайний левый элемент панели справа.
источник
А теперь просто поменяйте
isHidden
собственность.источник
Совершенствование От @lnafziger ответ
Сохраните ваши кнопки в надежной розетке и сделайте это, чтобы скрыть / показать это:
При необходимости используйте ниже функцию.
источник
Просто установите
barButton.customView = UIView()
и увидите трюкисточник
Нет способа «спрятать» UIBarButtonItem, вы должны удалить его из superView и добавить его обратно, когда вы захотите отобразить его снова.
источник
Это длинный путь вниз по списку ответов, но на всякий случай, если кто-то захочет легко скопировать и вставить для быстрого решения, вот оно
источник
Один из способов сделать это - использовать
initWithCustomView:(UIView *)
свойство при выделенииUIBarButtonItem
. У подклассаUIView
будет свойство скрывать / отображать.Например:
1. Имейте то,
UIButton
что вы хотите скрыть / показать.2. Сделайте
UIButton
как пользовательский вид. Подобно :3. Вы можете скрыть / показать
myButton
созданное вами.[myButton setHidden:YES];
источник
Для версии Swift, вот код:
Для
UINavigationBar
:источник
Установка цвета текста в прозрачный цвет, когда элемент панели кнопок отключен, вероятно, более чистый вариант. Там нет странностей, которые вы должны объяснить в комментарии. Также вы не уничтожаете кнопку, поэтому сохраняете все связанные с ней раскадровки.
Затем, когда вы захотите скрыть элемент панели кнопок, вы можете просто сделать:
Жаль, что нет скрытых свойств, но это дает тот же результат.
источник
Если в UIBarButtonItem вместо текста есть изображение, вы можете сделать это, чтобы скрыть его:
navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;
источник
Некоторые вспомогательные методы, которыми я поделился, основываясь на принятом ответе lnafziger, так как у меня есть несколько панелей инструментов и несколько кнопок на каждой:
источник
Вы можете легко получить вид и скрыть это таким образом
источник
Если вы используете Swift 3
источник
Вот расширение, которое справится с этим.
ИСПОЛЬЗОВАНИЕ:
источник
В дополнение к ответу Эли Бурка, если у вас
UIBarButtonItem
есть фоновое изображение вместо заголовка, вы можете использовать код:источник
Вам нужно манипулировать массивом toolbar.items.
Вот код, который я использую, чтобы скрыть и отобразить кнопку Готово. Если ваша кнопка находится на крайнем краю панели инструментов или между другими кнопками, другие ваши кнопки будут перемещаться, поэтому, если вы хотите, чтобы ваша кнопка просто исчезла, поместите эту кнопку как последнюю кнопку к центру. Я оживляю движение кнопки для эффекта, мне это очень нравится.
}
так что теперь можете использовать следующий код, чтобы показать свою кнопку
или скрыть свою кнопку
источник
В IB, если вы оставите название кнопки пустым, оно не появится (никогда не инициализируется?). Я делаю это часто во время разработки во время обновлений пользовательского интерфейса, если я хочу, чтобы элемент панели кнопок временно исчезал для сборки, не удаляя ее и не удаляя все ссылки на выходы.
Это не дает того же эффекта во время выполнения, установка названия кнопки на ноль не приведет к исчезновению всей кнопки. Извините, на самом деле не отвечает на ваш вопрос, но может быть полезным для некоторых.
Редактировать: этот трюк работает, только если стиль кнопки установлен равным
источник
Я добавлю свое решение здесь, так как я еще не нашел упомянутое здесь. У меня есть динамическая кнопка, изображение которой зависит от состояния одного элемента управления. Самым простым решением для меня было установить изображение,
nil
если элемент управления отсутствует. Изображение обновлялось каждый раз, когда обновлялся элемент управления, и, таким образом, это было оптимальным для меня. Просто чтобы убедиться , что я также установитьenabled
вNO
.Установка ширины в минимальное значение не работает на iOS 7.
источник
С благодарностью @lnafziger, @MindSpiker, @vishal, et. аль,
Простейший вкладыш, к которому я пришел для одной правой (или левой) кнопки панели:
Как в:
Я проверил это, и оно работает для меня (с элементом кнопки сильной панели, подключенным через IB).
источник