Можем ли мы отключить навигационный контроллер leftBarButtonItem, который является кнопкой возврата контроллера представления в iPhone? - PullRequest
5 голосов
/ 08 июля 2010

Я хочу отключить кнопку возврата по умолчанию на навигационном контроллере

self.navigationItem.rightBarButtonItem.enabled = NO; 
// Below code does not work since leftBarButtonItem is always nil.
self.navigationItem.leftBarButtonItem.enabled = NO;

Я сделал это вручную, как показано ниже, но есть ли свойство отключить кнопку возврата по умолчанию только одной строкой?

backButton = [[UIButton alloc] initWithFrame:CGRectMake(5, 5, 100, 30)];
[backButton setBackgroundImage:[UIImage imageNamed:@"backbutton_100.png"] forState:UIControlStateNormal];
[backButton addTarget:self  action:@selector(backAction:)  forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"  All Customers" forState:UIControlStateNormal];
backButton.titleLabel.font = [UIFont boldSystemFontOfSize:12];
[buttonView addSubview:backButton];

UIBarButtonItem* leftButton = [[UIBarButtonItem alloc] initWithCustomView:buttonView];
self.navigationItem.leftBarButtonItem = leftButton;
[leftButton release];

// Now it is working.
self.navigationItem.leftBarButtonItem.enabled = NO;

Ответы [ 4 ]

11 голосов
/ 03 июня 2011

Очень легко ..... просто попробуйте это

self.navigationController.navigationBar.userInteractionEnabled = NO;   //for  disabling 

self.navigationController.navigationBar.userInteractionEnabled = YES; //for again enabling
5 голосов
/ 31 июля 2010

Использование «hidesBackButton = YES» на самом деле не элегантное решение, потому что оно скрывает кнопку, а это не то, что нам нужно. Приемлемым обходным решением будет добавление UILabel в окно над кнопкой «Назад», по крайней мере, отключение касаний кнопки.

Добавьте этот метод в свой класс AppDelegate:

- (void) disableLeftBarButtonItemOnNavbar:(BOOL)disable
{
    static UILabel *l = nil;

    if (disable) {
        if (l != nil)
            return;
        l = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, 160, 44)];
        l.backgroundColor = [UIColor clearColor];
        l.userInteractionEnabled = YES;
        [self.window addSubview:l];
    }
    else {
        if (l == nil)
            return;
        [l removeFromSuperview];
        [l release];
        l = nil;
    }
}

Вы можете вызвать это так с любого контроллера представления, чтобы отключить:

MyAppDelegate *appDeleg = (MyAppDelegate *) [[UIApplication sharedApplication] delegate];
[appDeleg disableLeftBarButtonItemOnNavbar:YES];

Для включения:

MyAppDelegate *appDeleg = (MyAppDelegate *) [[UIApplication sharedApplication] delegate];
[appDeleg disableLeftBarButtonItemOnNavbar:NO];
2 голосов
/ 08 июля 2010

Позвоните [self.navigationItem setHidesBackButton:YES]; для контроллера вида, которому вы не хотите иметь кнопку возврата.Затем установите leftBarButtonItem как обычно.

1 голос
/ 17 октября 2012

Вы также можете использовать

[[_navigationController.topViewController.navigationItem leftBarButtonItem] setEnabled:NO]; // The top view controller on the stack.
[[_navigationController.visibleViewController.navigationItem leftBarButtonItem] setEnabled:NO];// Return modal view controller if it exists. Otherwise the top view controller.

, вы можете использовать это, когда хотите отключить или включить UIViewControler из Appdelegate или любого другого viewcontroler.

...