当我根据存储状态自动跳转到该视图时,为啥工具栏项不出现?

Posted

技术标签:

【中文标题】当我根据存储状态自动跳转到该视图时,为啥工具栏项不出现?【英文标题】:why do toolbar items not appear when I automatically jump to that view based on stored state?当我根据存储状态自动跳转到该视图时,为什么工具栏项不出现? 【发布时间】:2011-04-16 11:46:47 【问题描述】:

我试图了解为什么在启动并查看存储状态后自动跳转到第二个视图(使用 UINavigationController)时,工具栏项没有出现?

当我返回主页时(通过 UINavigationController 标准安排),然后选择 UITableView 中的行,然后再次返回相同的视图,工具栏项看起来很好。

给出粗略的代码摘录是:

ma​​inController - 基于正常选择的条目

通过“didSelectRowAtIndexPath” 创建新的视图控制器并将 (pushViewController) 推入堆栈

ma​​inController - 重新启动并检查前一个状态用户是否在第二层视图中

在 viewDidLoad 方法的底部检查上一个视图的状态 如果需要然后按照与上述正常选择方法相同的方法自动跳转到第二层视图 - 实际上我重构了两者的代码以使用相同的方法/代码

第二层视图

在 ViewDidLoad 中设置工具栏 - 此方法中的代码

代码:

- (void)setupToolbar 
    [self.navigationController setToolbarHidden:NO];
    UIBarButtonItem *increaseFontButton = [[UIBarButtonItem alloc] 
                                           initWithImage:[UIImage imageNamed:@"icon_zoom_in.png"] 
                                           style:UIBarButtonItemStylePlain 
                                           target:self 
                                           action:@selector(pressButtonIncreaseFont:)
                                           ];
    UIBarButtonItem *decreaseFontButton = [[UIBarButtonItem alloc] 
                                           initWithImage:[UIImage imageNamed:@"icon_zoom_out.png"] 
                                           style:UIBarButtonItemStylePlain 
                                           target:self 
                                           action:@selector(pressButtonDecreaseFont:)
                                           ];
    NSArray *items = [NSArray arrayWithObjects: increaseFontButton, decreaseFontButton, nil];
    self.toolbarItems = items;

    //release buttons
    [increaseFontButton release];
    [decreaseFontButton release];


有什么想法吗?寻找故障的想法?

【问题讨论】:

【参考方案1】:

我发现 Objective-C 的一个特性非常烦人且容易出错,那就是在空对象上调用方法时静默失败。在 setupToolBar 方法的第一行之后,检查 navigationController 是否为空:

  NSLog(@" navigationController is 0x%x", self.navigationController);

是否以与常规情况相同的方式为重新启动情况创建导航控制器?

【讨论】:

感谢领导 Mike - 试过了 - 不幸的是它似乎没问题(即在我的情况下这似乎不是问题) - 我得到“navigationController is 0x553e780”的情况工具栏不存在 在您的第二个视图控制器中,查找 hidesBottomBarWhenPushed 和 NSLog 该值。如果它根本不存在,请将其设置在您的 init 方法中并尝试这两个值。它可能默认为意外值。 谢谢 - 不幸的是,这并没有帮助(如果有的话,我永远不会找到它)【参考方案2】:

我想出了如何通过消除过程来解决这个问题,但我不明白为什么:)

那么修复它的原因是更改了应用程序委托的“didFinishLaunchingWithOptions”方法中的以下行:

  // OLD Entry - Did not work
  //[self.window addSubview:navigationController.view];

  // NEW Entry - Fixed it
  self.window.rootViewController = self.navigationController;

有什么想法吗?

【讨论】:

以上是关于当我根据存储状态自动跳转到该视图时,为啥工具栏项不出现?的主要内容,如果未能解决你的问题,请参考以下文章

为啥从微信打开百度贴吧链接总是自动跳转到这个下载贴吧页面

asp中如何使表单提交数据后不跳转到该页面?

当我进入Source视图时,如何跳转到CKEditor 4中的当前位置?

编辑另一个单元格时,集合视图会自动跳转到第一个单元格

为啥浏览器打开一个页面不自动跳转了

跳转到另一个网页时自动登录