【问题标题】:Obj-C, Navigation Controller with Tab Controller am I using them incorrectly?Obj-C,带有选项卡控制器的导航控制器我是否使用不正确?
【发布时间】:2011-12-26 20:41:03
【问题描述】:

当我第一次设置我的应用时,我在让单个导航控制器工作时遇到了一些问题。

每个标签项后面都有几个屏幕。我认为我遇到的问题是视图控制器在它们之间切换时会显示在错误的选项卡中。我并不担心在每个选项卡中保持最后使用的视图控制器处于打开状态,事实上我现在隐藏了选项卡栏以阻止这种情况。

所以目前我的每个标签都有导航控制器文件。我将它们分配在 IB 的主窗口中。

我是这样使用它们的......

CategorySelTableViewController *nextController = 
          [[[CategorySelTableViewController alloc] initWithNibName:
          @"CategorySelTableView" bundle:nil] autorelease];
nextController.hidesBottomBarWhenPushed = YES;

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] 
         delegate];

[delegate.billsndepsNavController pushViewController:nextController animated:YES];

但是,我有一些漏洞。

我无法释放我的委托,这会导致错误。

我的同事建议我应该只使用self.navigationcontroller

但这对我来说是一个很大的改变,我想在做出改变之前明确地知道我是否做错了?

【问题讨论】:

    标签: objective-c xcode cocoa-touch uinavigationcontroller


    【解决方案1】:

    当一个视图控制器被压入堆栈时,它有两种访问导航控制器的方式:

    • 使用self.navigationController
    • 在委托中访问导航控制器 ivar:
      [UIApplication sharedApplication].delegate.navigationController

    两者是等价的,但第一个更短,所以它往往被更多地使用。从一个切换到另一个没有任何好处。进行额外输入的唯一原因是当您不在 pushed 视图控制器中时,例如:在独立 GUI 组件中使用的视图控制器,或不是视图控制器的对象。

    不应释放委托,因为它在应用程序的整个生命周期中都存在。

    【讨论】:

    • 我是说每个标签都有一个导航控制器。我糊涂了。所以不要使用委托,就像我在上面的代码中一样?你能提供一些我会使用的更多代码吗?
    • 任何人,这个答案似乎让我的问题感到困惑?
    • 所以你的说法是为我整个应用使用一个导航控制器?
    • 如果你的应用有独立的部分,你应该使用标签栏控制器。如果你使用标签,你应该每个标签使用一个导航控制器(已经在 Xcode 模板项目中提供。要在使用标签时引用导航控制器,只需使用 self.navigationController。你不能使用标签而只使用一个导航控制器。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多