1

以下のメソッドを実装して、すべてのビューで同じカスタム ナビゲーション バーを作成しました。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
//    viewController.navigationItem.rightBarButtonItem = cancelButton;
// -- Adding INFO button to Navigation bar --
UIBarButtonItem *infoButton =  [[UIBarButtonItem alloc]
                                initWithTitle:@"i"
                                style:UIBarButtonItemStyleBordered
                                target:self
                                action:@selector(showInfo)];
infoButton.tag = 10;
self.navCntrl.topViewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:infoButton, nil];
self.navCntrl.navigationBar.tintColor = [UIColor colorWithRed:45/255.0 green:77/255.0 blue:67/255.0 alpha:1];
//    NSLog(@"Inside implemented method");
}

UINavigationControllerDelegate

上記の方法では、ナビゲーション アイテムに右ボタンを追加しました。ここで、特定のビューでこの右ボタンを非表示にしたいと考えています。どうすればこれを達成できますか? ありがとう。

4

6 に答える 6

7

こいつを使ってみる

self.navigationItem.rightBarButtonItem = nil;
self.navigationItem.rightBarButtonItem.enabled = NO;
于 2013-05-23T13:51:12.643 に答える
0

まだ答えを探している人のために、このコードは AppDelegate.m で私のために働いた

 - (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    //  Get rid of the edit button in UITabBarController's moreNavigationController
            tabBarController.customizableViewControllers = nil;
    ...
        }
于 2016-04-06T00:13:41.183 に答える
0

これを行う良い方法は、View Controller にプロトコルを実装させることです。あなたは名前を選びますが、それは のようなものCustomNavigationCustomizationで、単一のメソッドを持つことができます:

@protocol CustomNavigationCustomization

- (BOOL)shouldShowRightButton;

@end

次に、メソッドを次のように変更できます。

- (void)navigationController:(UINavigationController *)navigationController   
      willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

    BOOL shouldShowRightButton = YES;

    if ([viewController conformsToProtocol:@protocol(CustomNavigationCustomization)) {
        UIViewController <CustomNavigationCustomization> *customizableViewController =
                       (UIViewController <CustomNavigationCustomization>)viewController;

        shouldShowRightButton = [customizableViewController shouldShowRightButton];
    }

    if (shouldShowRightButton) {

        //    viewController.navigationItem.rightBarButtonItem = cancelButton;
        // -- Adding INFO button to Navigation bar --
        UIBarButtonItem *infoButton =  [[UIBarButtonItem alloc] initWithTitle:@"i"
                                                                        style:UIBarButtonItemStyleBordered
                                                                       target:self
                                                                       action:@selector(showInfo)];
        infoButton.tag = 10;
        self.navCntrl.topViewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:infoButton, nil];
        self.navCntrl.navigationBar.tintColor = [UIColor colorWithRed:45/255.0 green:77/255.0 blue:67/255.0 alpha:1];
        //    NSLog(@"Inside implemented method");
    }
}

ナビゲーション コントローラー デリゲートのメソッドは非常に防御的であることに注意してください。View Controller がプロトコルに準拠しているかどうかを確認し、その後でメソッドを呼び出します。この方法では、ほとんどのビュー コントローラーでプロトコルに準拠する必要はなく、カスタマイズしたいものだけで済みます。

于 2013-05-23T13:58:47.843 に答える
0

viewController が右側のバー ボタンを必要としないタイプの tf をプッシュしたかどうかを確認するだけです。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

    // Replace the YourViewController with the type of the viewcontroller 
    // you want not the have the right bar button.
    if ([viewController isKindOfClass:[YourViewController class]]) {
        return;
    }

    //    viewController.navigationItem.rightBarButtonItem = cancelButton;
    // -- Adding INFO button to Navigation bar --
    UIBarButtonItem *infoButton =  [[UIBarButtonItem alloc]
                                    initWithTitle:@"i"
                                    style:UIBarButtonItemStyleBordered
                                    target:self
                                    action:@selector(showInfo)];
    infoButton.tag = 10;
    self.navCntrl.topViewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:infoButton, nil];
    self.navCntrl.navigationBar.tintColor = [UIColor colorWithRed:45/255.0 green:77/255.0 blue:67/255.0 alpha:1];
    //    NSLog(@"Inside implemented method");
}
于 2013-05-23T14:04:27.247 に答える