Панель инструментов UINavigationController - код один раз, не в каждом контроллере представления? - PullRequest
1 голос
/ 11 ноября 2011

У меня есть приложение с navcontroller, созданным в appdel. Каждый вставленный vc имеет блок кода в viewdidload, который устанавливает панель инструментов. Панель инструментов всегда одинакова. Есть ли способ для меня, чтобы просто создать этот код один раз - и не помещать его в каждый vc?

    [self.navigationItem setHidesBackButton:YES];

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleBordered target:self action:@selector(backClicked)];

UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

UIBarButtonItem *storyBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Sto" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)];
storyBtnItem.tag = 1;
UIBarButtonItem *renderBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Ren" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)];
renderBtnItem.tag = 2;
UIBarButtonItem *amenBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Ame" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)];
amenBtnItem.tag = 3;
UIBarButtonItem *availBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Availability" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)];
availBtnItem.tag = 4;
UIBarButtonItem *eopBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Eq" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)];
eopBtnItem.tag = 5;
UIBarButtonItem *stkBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"St" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)];
stkBtnItem.tag = 6;
UIBarButtonItem *movBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Fi" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)];
movBtnItem.tag = 7;
NSArray *items = [NSArray arrayWithObjects:flexibleSpaceLeft, stoBtnItem, reBtnItem, ameBtnItem, avaBtnItem,  eBtnItem, stBtnItem, mvBtnItem, nil];  
[self setToolbarItems:items];
[self.navigationController.toolbar setTintColor:[UIColor colorWithRed:79.0/255.0 green:145.0/255.0 blue:205.0/255.0 alpha:1.0]];

Ответы [ 3 ]

2 голосов
/ 11 ноября 2011

Просто выполните vc.toolbarItems = self.toolbarItems (где vc - контроллер вида, который нужно нажать) в методе, в котором вы нажимаете следующий контроллер вида.

например:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIViewController *vc = [UIViewController new];
    vc.toolbarItems = self.toolbarItems
    [self.navigationController pushViewController:vc animated:YES];
    [vc release]; // if not using ARC
}

Кроме того, вам не нужно делать это в методе -viewDidLoad, настройка элементов навигации и элементов панели инструментов не требует загрузки вида и, таким образом, может быть выполнена вашим методом init или awakeFromNib.Если вы сделаете это в -viewDidLoad, вы потенциально можете установить элементы несколько раз.

0 голосов
/ 11 ноября 2011

Вы можете создать абстрактный подкласс для ваших viewControllers, у которого эта функция есть в его ViewDidLoad.Затем вы просто настраиваете его в одном месте.

Например, создайте класс контроллера представления с именем myMasterViewController.Все, что вам нужно настроить - это viewDidLoadMethod.Затем в других ваших контроллерах заставьте их наследовать от myMasterViewController вместо UIViewController.Убедитесь, что у вас есть [super viewDidLoad]; в вашем другом венчурном капитале.

0 голосов
/ 11 ноября 2011

Способ, которым я обычно обрабатываю такие вещи, заключается в создании контроллера базового вида, и код для настройки панели инструментов будет в контроллере базового представления, а все остальные контроллеры представления наследуются от этого базового контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...