2014-05-30 3 views
0

У меня есть контроллер панели вкладок в качестве моего корневого представления с 5 навигационными контроллерами (по одному для каждой вкладки). На панели навигации на каждой вкладке будет кнопка с одинаковыми функциональными возможностями на всех вкладках. Есть ли более простой способ добавить эту кнопку (и ответить на выбор), чем копировать/вставлять ее в каждый контроллер навигации?Простой способ реализовать элемент навигационной панели с помощью контроллера панели вкладок?

EDIT: В контроллере представления ребенка моего заказного навигационного контроллера, у меня есть:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    ... 
    CustomNavigationController *navController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeNavigationController"]; 
    [navController addNotificationsButton:YES searchButton:NO]; 
} 

и в пользовательской навигации контроллера у меня есть:

-(void)addNotificationsButton:(BOOL)notifications searchButton:(BOOL)search { //Choose which bar button items to add 

    NSMutableArray *barItems = [[NSMutableArray alloc]init]; 

    if (notifications) { 
     //Create button and add to array 
     UIImage *notificationsImage = [UIImage imageNamed:@"first"]; 
     UIBarButtonItem *notificationsButton = [[UIBarButtonItem alloc]initWithImage:notificationsImage landscapeImagePhone:notificationsImage style:UIBarButtonItemStylePlain target:self action:@selector(notificationsTap:)]; 

     [barItems addObject:notificationsButton]; 
    } 

    if (search) { 
     //Create button and add to array 
     UIBarButtonItem *searchButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(searchTap:)]; 
     [barItems addObject:searchButton]; 
    } 

    [self.navigationItem setRightBarButtonItems:barItems]; 
} 

Но я просто получаю пустой панель навигации при загрузке контроллера детского представления. Есть идеи?

EDIT 2: Мне просто нужно было добавить аргумент для контроллера вида, у которого на панели навигации я хотел добавить кнопки. Вот окончательное внедрение ...

для CustomViewController.m:

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     ... 
     CustomNavigationController *navController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeNavigationController"]; 
      [navController addNotificationsButton:YES searchButton:NO forViewController:self]; 

} 

Для CustomNavigationController.m

-(void)addNotificationsButton:(BOOL)notifications searchButton:(BOOL)search forViewController:(UIViewController*)vc { //Choose which bar button items to add 


    NSMutableArray *barItems = [[NSMutableArray alloc]init]; 

    if (notifications) { 
     //Create button and add to array 
     UIImage *notificationsImage = [UIImage imageNamed:@"first"]; 
     UIBarButtonItem *notificationsButton = [[UIBarButtonItem alloc]initWithImage:notificationsImage landscapeImagePhone:notificationsImage style:UIBarButtonItemStylePlain target:self action:@selector(notificationsTap:)]; 

     [barItems addObject:notificationsButton]; 
    } 

    if (search) { 
     //Create button and add to array 
     UIBarButtonItem *searchButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(searchTap:)]; 
     [barItems addObject:searchButton]; 
    } 


     vc.navigationItem.rightBarButtonItems = barItems; 

} 
+0

Примечание: Вы должны добавить @property (сильный, неатомической) CustomNavigationController * NavController; на ваш customViewController, иначе ARC отключит ваш CustomNavigationController, вызывая EXC_BAD_ACCESS, когда вы нажимаете кнопку –

ответ

0

Вы должны создать подклассUINavigationController, настроить его, как вы хотите (так с кнопкой), и установить, что в классе вашего 5 Navigation Controller.

Очевидно, что я не могу писать здесь все ваши приложения, но важно то, что у вас есть способ.

Если вы являетесь разработчиком в первых раз, я рекомендую вам изучить о subclassing и т.д.

+0

, это именно то, что мне нужно, но у меня все еще есть небольшая проблема. Можете ли вы взглянуть на мое редактирование выше? –

+0

в вашем раскадровке вы установили каждый navigationController с новым подклассом? –

+0

Да, я установил пользовательский класс для всех 5 навигационных контроллеров в свой CustomNavigationController и дал каждому контроллеру другой код раскадровки/восстановления ID –

0

Подкласс навигационной панели и добавить кнопку как часть подкласса. Теперь вы можете использовать 5 экземпляров подкласса вместо 5 базовых навигационных баров и вырезать повторяющуюся работу по добавлению кнопок.

Смежные вопросы