【问题标题】:UINavigationController Toolbar - code once, not in every view controller?UINavigationController 工具栏 - 一次编码,而不是在每个视图控制器中?
【发布时间】:2011-11-11 14:33:29
【问题描述】:

我有一个带有在 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]];

【问题讨论】:

    标签: iphone objective-c ipad uinavigationcontroller


    【解决方案1】:

    只需在推送下一个视图控制器的方法中执行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 中执行此操作,您可能会多次设置这些项目。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        你可以为你的viewControllers创建一个抽象的子类,在它的ViewDidLoad中有这个函数。然后你只需在一个地方调整它。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多