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

Как отключить элемент кнопки панели навигации в iOS

Я создал контроллер навигации. Во втором представлении (которое нажато) у меня есть вызов webservice и размещение представления наложения и установка

self.view.userInteractionEnabled = NO ;

Как только вызов веб-службы завершен, я возвращаюсь к

self.view.userInteractionEnabled = YES ;

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

Я попытался использовать self.navigationItem.backBarButtonItem.enabled = NO. Но все же я могу нажать на кнопку и перейти к первому экрану. Как отключить эти две кнопки?

4b9b3361

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