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