【问题标题】:iphone custom navigationBar singleton or not?iphone自定义navigationBar单例与否?
【发布时间】:2009-10-27 14:28:01
【问题描述】:

我正在使用自己的自定义导航栏,但我需要在许多不同的视图中访问它,因为我需要添加按钮、更改标题等。

我应该在每次显示新视图时传递对我的导航栏的引用,还是只将其设为单例以便我可以从任何视图访问它?

【问题讨论】:

    标签: iphone singleton uinavigationbar


    【解决方案1】:

    都没有。

    您已将添加按钮和更改标题列为您需要自定义工具栏的原因,但这两件事都可以通过导航控制器完成,无需创建您自己的,因此无需创建单例或全局变量。

    当你推送一个新的视图控制器时,你可以简单地通过调用 [self setTitle:@"Nav Title"]; 来设置导航栏的标题。在该视图控制器的 -viewDidLoad 中。如果需要添加按钮,请使用如下代码(也在 -viewDidLoad 中):

    [[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc]
            initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                                 target:self 
                                 action:@selector(setEditing)] autorelease]];
    

    换句话说,如果您仅出于列出的原因创建自定义导航栏,那么您的设计就有缺陷。我想创建自定义导航栏有一些很好的理由,但这些都不在其中。

    考虑查看View Controller Programming Guide for iPhone OSConfiguring the Navigation Item Object 部分。

    最好的问候,

    【讨论】:

      【解决方案2】:

      你在使用 UINavigationController 吗?如果是这样,您可以像这样从任何子控制器访问导航栏:

      UINavigationBar *bar = self.navigationController.navigationBar;
      

      【讨论】:

        【解决方案3】:

        将其设为全局变量。

        【讨论】:

        • 我在网上读到的东西说使用全局变量不是最佳实践,而是使用单例
        • 如果可能的话,我会避免使用全局变量,因为它避免了封装。假设你需要做一个模态视图控制器,它必须有一个类似的导航栏。糟糕,现在两个导航控制器都将尝试使用相同的导航栏,结果并不好。
        • 让我更清楚一点:使用全局变量,只要使用全局变量比其他方法更简单。
        猜你喜欢
        • 2011-01-16
        • 2020-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-03
        相关资源
        最近更新 更多