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

IOS 8 UINavigationController отключить кнопку "Назад"

в моем контроллере навигации мне нужно временно отключить кнопку "Назад". Я знаю, что он может быть скрыт, используя следующее или что-то подобное:

[self.navigationController.navigationItem setHidesBackButton:YES animated:YES];

Но это не то, что мне нужно, вместо этого я хочу, чтобы кнопка "Назад" была выделена серым цветом и не реагировала на события пользовательского касания. Их способ достичь этого, не заменяя кнопку возврата по умолчанию?

Спасибо заранее!

4b9b3361

Ответ 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;

Это не отображает кнопки как отключенные, но предотвратит прикосновения.

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