【问题标题】:Back Navigation Button Not Showing up in Pushed View Controller后退导航按钮未显示在推送视图控制器中
【发布时间】:2011-03-26 03:40:04
【问题描述】:

我有一个问题,我可以从我的根视图控制器成功推送一个新的视图控制器(使用使用 Core Data 模板的基于导航的应用程序),但是详细视图是与根视图控制器分开的 xib 文件, 不显示返回导航按钮。我确信我已经在 IB 中完成了所有正确的连接,并且其他一切都按预期工作。

RootViewController.h

@class ItemsViewController;

@interface RootViewController : UITableViewController <NSFetchedResultsControllerDelegate> {

IBOutlet ItemsViewController *itemsVC;

}

@property (nonatomic, retain) IBOutlet ItemsViewController *itemsVC;

@end

RootViewController.m

#import "ItemsViewController.h"

@synthesize itemsVC;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
// Pushes to ItemsViewController

ItemsViewController *itemsViewController = [[ItemsViewController alloc] initWithNibName:@"ItemsViewController" bundle:[NSBundle mainBundle]];

[self.navigationController pushViewController:itemsViewController animated:YES];
[itemsViewController release];

}

ItemsViewController 是一个 UITableViewController 子类,有自己的 xib,也叫 ItemsViewController。同样,它是从 RootViewController 推送的,但没有显示后退按钮like this. 我的印象是它是使用导航控制器的“免费”功能。如您所料,这是一个非常令人沮丧的障碍,我将不胜感激。

【问题讨论】:

  • 在看到这篇文章之前,我遇到了同样的问题。这真是奇怪的默认行为。如果没有提供标题,为什么不直接“返回”?
  • 是的,或者 Xcode 中的某种错误或警告会很好。

标签: iphone uinavigationcontroller ios4 uinavigationitem


【解决方案1】:

您的ItemsViewController 类是否在其viewDidLoad 方法中设置了title 属性?

您应该调用[tableView deselectRowAtIndexPath:indexPath animated:YES] 作为tableView:didSelectRowAtIndexPath: 的最后一行,以符合Apple 的人机界面指南。

【讨论】:

  • 我还没有设置标题。它来自从 RVC 输入的 CD 名称属性。是否需要设置标题才能显示后退按钮?
  • 是的。但是你应该总是在导航栏上有一个标题。这个怎么样:你是在RootViewControllerviewDidLoad方法中设置title吗?当未设置根视图的标题时,我之前在使用后退按钮时遇到过问题。
  • 对不起,我把脸从桌子上抬起来。在 RVC 中设置标题给了我后退按钮。我想它需要在渲染之前填充。感谢您的提示,我不会很快忘记的!
  • 更奇怪的是它竟然出现在模拟器中!
【解决方案2】:

是的,请确保您的 RootViewController 上有标题,如果没有,则不会出现任何按钮。以编程方式设置标题;

self.navigationItem.title = @"Hello Der";

【讨论】:

    【解决方案3】:

    为未来的读者提供一些额外信息:我在尝试在应用程序加载时重新填充导航层次结构时遇到了这个问题,所以我从应用程序委托的 application:didFinishLaunchingWithOptions: 方法调用 setViewControllers:。我遇到了同样的问题,后退按钮没有出现。

    在我的情况下,在其 viewDidLoad 中设置根视图控制器的导航项标题不起作用,可能是因为其他视图首先加载并且将根的标题视为空。相反,我在调用 setViewControllers: 之前在我的应用程序中设置了根视图控制器的导航项标题:didFinishLaunchingWithOptions: 方法,并且修复了它。

    【讨论】:

      【解决方案4】:

      如果你是个傻瓜并且错误地将视图初始化为模态视图而不是将视图推送到导航控制器,也会发生这种情况。

      oops: [self presentModalViewController:navController animated:YES]; 意思是:[self.navigationController pushViewController:controller animated:YES];

      【讨论】:

        【解决方案5】:

        尝试跟随 sn-p。它对我有用!

        [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Image.png"] forBarMetrics:UIBarMetricsDefault];
        
        [self.navigationController.navigationBar bringSubviewToFront:[self.navigationController.navigationItem backBarButtonItem]];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多