Как отключить элемент кнопки панели навигации в iOS
Я создал контроллер навигации. Во втором представлении (которое нажато) у меня есть вызов webservice и размещение представления наложения и установка
self.view.userInteractionEnabled = NO ;
Как только вызов веб-службы завершен, я возвращаюсь к
self.view.userInteractionEnabled = YES ;
Когда я это делаю, все остальные кнопки, кроме кнопок на панели навигации, отключены. Как отключить эти две кнопки панели навигации? (кнопка, аналогичная кнопке "Назад", которая появляется, чтобы сначала просмотреть контроллер и другую кнопку, которая дает информацию о справке).
Я попытался использовать self.navigationItem.backBarButtonItem.enabled = NO
. Но все же я могу нажать на кнопку и перейти к первому экрану. Как отключить эти две кнопки?
Ответы
Ответ 1
Попробуйте это
Рекомендуется
self.navigationItem.leftBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem.enabled = NO;
Или просто отключить
в случае с краем
self.view.window.userInteractionEnabled = NO;
Update:
Недавно Apple не разрешает включать/отключать кнопку "Назад". Вместо этого мы можем скрыть это.
self.navigationItem.hidesBackButton = YES;
Ответ 2
Вы можете сделать следующее, если вы работаете на Swift
self.navigationItem.rightBarButtonItem?.enabled = true
Этот фрагмент отключит кнопку.
Ответ 3
Просто отключите взаимодействие с тегом UINavigationController
и навигационной панелью:
self.navigationController.navigationBar.userInteractionEnabled = NO;
self.navigationController.view.userInteractionEnabled = NO;
И включите его, когда вам это нужно:
self.navigationController.navigationBar.userInteractionEnabled = YES;
self.navigationController.view.userInteractionEnabled = YES;
Ответ 4
Last Swift: Чтобы скрыть кнопку "Назад", вы ДОЛЖНЫ использовать:
self.navigationItem.setHidesBackButton(true, animated: false)
Примечание. Это может вызвать ошибку на панели навигации, которая может привести к появлению артефакта вместо скрытой кнопки возврата при переходе к представлению, у которого нет кнопки "Назад" (или на левой панели), Артефакт, который появляется, представляет собой либо эллипс "...", либо заголовок предыдущего viewController в стеке. Я считаю, что эта ошибка связана с ошибкой, зарегистрированной в собственном проекте кода Apple "CustomizingUINavigationBar", CustomBackButtonViewController.m
Ответ 5
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
}
Ответ 6
Я решил это, просто добавив свойство в свой диспетчер представлений:
@property (nonatomic, strong) IBOutlet UIBarButtonItem * RightButton;
Затем я подключил его к кнопке на раскадровке.
Затем вы можете установить его свойства следующим образом:
self.RightButton.enabled=true;
Ответ 7
Обновлен для Swift 3:
Если вы хотите отключить элемент кнопки панели навигации или вы хотите отключить отверстие UINavigationBar, то есть весь элемент, присутствующий на панели навигации, используйте ниже строки кода;
// if you want disable
self.navigationController?.navigationBar.isUserInteractionEnabled = false
// if you want enable again
self.navigationController?.navigationBar.isUserInteractionEnabled = true
Наслаждайтесь!...
Ответ 8
Для версии iOS 10.3, swift 3:
self.navigationItem.rightBarButtonItem?.isEnabled = false.
Ответ 9
Попробуйте этот код:
UIApplication.sharedApplication().beginIgnoringInteractionEvents()
Это остановит взаимодействие пользователя с приложением, и после сервисного вызова снова напишите этот код:
UIApplication.sharedApplication().endIgnoringInteractionEvents()
Конечно, это поможет.
Ответ 10
Однострочное решение
self.navigationController?.view.isUserInteractionEnabled = false
Ответ 11
var menuBtn = new UIButton(UIButtonType.Custom);
menuBtn.Frame = new CGRect(x: 0.0, y: 0.0, width: 20, height: 20);
menuBtn.SetImage(new UIImage("filter"), UIControlState.Normal);
menuBtn.Alpha = 0.05f; //to set the Alpha
menuBtn.Enabled = false;
проверено только на Mvvmcross Xamarin.iOS
Ответ 12
Элементы кнопок панели навигации должны переключаться путем обращения к ним через свойство navigationItem.
Например:
func setupNav() {
let saveButton = UIBarButtonItem.init(barButtonSystemItem: .save, target: self, action: #selector(onSavePressed))
navigationItem.rightBarButtonItem = saveButton
saveButton.isEnabled = false
}
func validateSave() {
saveButton.isEnabled = isConditionMet // WON'T work
navigationItem.rightBarButtonItem.isEnabled = isConditionMet // WORKS!
}