UINavigationController工具栏 - 代码一次,而不是在每个视图控制器中?

时间:2011-11-11 14:33:29

标签: iphone objective-c ipad uinavigationcontroller

我有一个带有在appdel中创建的navcontroller的应用程序。推入的每个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 个答案:

答案 0 :(得分:2)

在推送下一个视图控制器的方法中,只需执行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方法中执行此操作,设置导航项和工具栏项不需要加载视图,因此可以在initawakeFromNib方法。如果您在-viewDidLoad中执行此操作,则可能会多次设置项目。

答案 1 :(得分:0)

我通常处理这类事情的方法是创建一个基本视图控制器,设置工具栏的代码将在基本视图控制器中,所有其他视图控制器都从该基本控制器继承。

答案 2 :(得分:0)

您可以为ViewControllers创建一个抽象子类,该子类在ViewDidLoad中具有此功能。然后你只需在一个地方调整它。

例如,创建一个名为myMasterViewController的视图控制器类。您必须在其中设置的是viewDidLoadMethod。然后在你的其他控制器中使它们继承自myMasterViewController而不是UIViewController。确保您的其他VC中有[super viewDidLoad];