5

ナビゲーションコントローラーのデフォルトの戻るボタンを無効にしたい

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

以下に示すように手動で実行しましたが、デフォルトの戻るボタンを1行だけで無効にするプロパティはありますか?

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

4 に答える 4

11

とても簡単です.....これを試してみてください

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

self.navigationController.navigationBar.userInteractionEnabled = YES; //for again enabling
于 2011-06-03T12:52:17.873 に答える
5

「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;
    }
}

無効にするために、任意のView Controllerから次のように呼び出すことができます:

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

有効にする:

MyAppDelegate *appDeleg = (MyAppDelegate *) [[UIApplication sharedApplication] delegate];
[appDeleg disableLeftBarButtonItemOnNavbar:NO];
于 2010-07-31T12:35:12.487 に答える
2

[self.navigationItem setHidesBackButton:YES];戻るボタンを使用したくないView Controllerを呼び出します。次に、leftBarButtonItem通常どおりに設定します。

于 2010-07-08T09:24:06.687 に答える
1

使用することもできます

[[_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.

これは、Appdelegateまたはその他のviewcontrolerからUIViewControlerを無効または有効にする場合に使用できます。

于 2012-10-17T05:27:37.993 に答える