IOS 8 UINavigationController отключить кнопку "Назад"
в моем контроллере навигации мне нужно временно отключить кнопку "Назад". Я знаю, что он может быть скрыт, используя следующее или что-то подобное:
[self.navigationController.navigationItem setHidesBackButton:YES animated:YES];
Но это не то, что мне нужно, вместо этого я хочу, чтобы кнопка "Назад" была выделена серым цветом и не реагировала на события пользовательского касания. Их способ достичь этого, не заменяя кнопку возврата по умолчанию?
Спасибо заранее!
Ответы
Ответ 1
Чтобы отключить кнопку "Назад", эти команды заставят ее делать то, что вы хотите:
Включить:
self.navigationController.navigationBar.userInteractionEnabled = YES;
self.navigationController.navigationBar.tintColor = [UIColor blueColor];
Отключено:
self.navigationController.navigationBar.userInteractionEnabled = NO;
self.navigationController.navigationBar.tintColor = [UIColor lightGrayColor];
Update:
Как и в iOS 7, есть также пробел, который вы хотите отключить на UINavigationBar
.
// You wrap it an 'if' statement so it doesn't crash
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
// disable the interactivePopGestureRecognizer
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Ответ 2
Это скрывает кнопку "Назад", поэтому она становится недоступной для пользователя. Но не отключает его:
[self.navigationItem setHidesBackButton:YES];
Ответ 3
Я считаю, что следующее должно помочь:
self.navigationController.navigationItem.backBarButtonItem.enabled = NO;
UPDATE
Извините, ребята, моя вера не сбылась.
Похоже, что свойство backBarButtonItem
предназначено только для установки пользовательского заголовка или изображения для кнопки "Назад".
Из документации:
Если вы хотите указать пользовательское изображение или заголовок для кнопки "Назад", вы можете назначить элемент пользовательской панели (с вашим пользовательским заголовком или изображение) к этому свойству. При настройке кнопки панели item, не присваивайте ему пользовательский вид; элемент навигации игнорируется пользовательские представления в кнопке обратной панели в любом случае.
Значение по умолчанию этого свойства равно nil.
К сожалению, я не нашел способа отключить кнопку "Назад", сохранив свой внешний вид и поведение, поскольку в любое время, когда я пытаюсь установить собственный UIBarButtonItem
в свойство navigationItem.backBarButtonItem
- он обновляется с помощью соответствующего стиля обратной кнопки и он всегда имеет enabled == YES
.
Я думаю, что это сделано Apple по какой-то причине, потому что мы в основном не должны заставлять пользователя оставаться на подробном экране и отключать его от возвращения.
Кроме того, в iOS7 и более поздних версиях пользователь всегда может использовать жестов swipe-from-left-edge (если вы не отключите его) для возврата.
Единственная уродливая вещь, которую я могу порекомендовать, - создать пользовательский UIBarButtonItem
и установить его в leftBarButtonItem
с заголовком "Назад", целью и селектором, который выйдет на ваш viewController. По умолчанию он заменит кнопку "назад".
Затем вы можете отключить его, как обычно, с помощью navigationItem.leftBarButtonItem.enabled = NO
.
К сожалению, он не будет выглядеть и действовать (в случае обновления названия в зависимости от доступного пространства) в качестве основной кнопки возврата: (
Ответ 4
Я знаю, что это довольно старый, но у меня тоже была эта проблема.
В моем случае в одном сценарии мне пришлось отключить кнопку "Назад", а в другой - отключить все кнопки навигации. мое решение полностью отключает панель навигации в обоих сценариях:
self.navigationController.view.userInteractionEnabled = NO;
Это не отображает кнопки как отключенные, но предотвратит прикосновения.
Надеюсь, это поможет