2013-05-23 3 views
1

Я сделал пользовательские панели навигации, так же для всех мнений по реализации метода ниже -:iPhone: Как удалить правую кнопку из панели навигации в контроллере?

- (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.

В приведенном выше методе я добавил правую кнопку в пункт навигации. Теперь я хочу скрыть эту правую кнопку в определенном представлении. Как я могу это достичь? Спасибо.

+0

Set self.navigationItem.rightBarButtonItem = Nil; когда вы хотите скрыть это. – jamil

+0

Я хочу скрыть правую кнопку, зачем использовать левую панель? –

+0

Извините, ошибка типа теперь исправить. – jamil

ответ

7

Попробуйте использовать этот один

self.navigationItem.rightBarButtonItem = nil; 
self.navigationItem.rightBarButtonItem.enabled = NO; 
1

использовать этот

self.navigationItem.rightBarButtonItem = nil; 
+0

Я уже пробовал, не работает. –

6

В viewDidLoad, попробуйте

self.navigationItem.rightBarButtonItem = nil; 

И в viewWillDisappear, не забудьте положить его обратно.

+0

Уже пробовал, не работает. –

+1

Спасибо, что это работает для меня! – swiftBoy

0

Хорошим способом сделать это было бы, чтобы контроллеры вашего представления реализовали протокол. Вы выбираете имя, но это может быть что-то вроде 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"); 
    } 
} 

Обратите внимание, что метод делегат диспетчера навигации очень защищен: он проверяет, соответствует ли ваш контроллер просмотра протоколу, и только тогда он вызывает этот метод. Таким образом, вам не нужно соответствовать протоколу на большинстве контроллеров просмотра, только в тех, которые вы хотите настроить.

0

Просто проверьте, если ViewController толкнул ТФ типа, где вы не хотите кнопку RIGH бар:

- (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"); 
} 
0

Для тех, кто все еще ищет ответ, этот код работает для меня в AppDelegate.m

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    // Get rid of the edit button in UITabBarController's moreNavigationController 
      tabBarController.customizableViewControllers = nil; 
    ... 
     } 
Смежные вопросы