我有一个问题,我可以从我的根视图控制器成功推送一个新的视图控制器(使用基于导航的应用程序使用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.我认为这是使用导航控制器的“免费”功能。正如您所料,这是一个非常令人沮丧的障碍,我将不胜感激任何帮助。
答案 0 :(得分:14)
您的ItemsViewController
类是否在其title
方法中设置了viewDidLoad
属性?
您应该将[tableView deselectRowAtIndexPath:indexPath animated:YES]
作为tableView:didSelectRowAtIndexPath:
的最后一行,以符合Apple的人机界面指南。
答案 1 :(得分:9)
是的,请确保您的RootViewController上有标题,如果没有,则不会出现任何按钮。以编程方式设置标题;
self.navigationItem.title = @"Hello Der";
答案 2 :(得分:1)
未来读者的一些额外信息:我在尝试在应用程序加载时重新填充导航层次结构时遇到了这个问题,所以我从app delegate的应用程序调用setViewControllers:didFinishLaunchingWithOptions:method。我遇到了同样的问题,后退按钮没有显示出来。
在我的情况下,在viewDidLoad中设置根视图控制器的导航项标题不起作用,大概是因为其他视图首先加载并将根标题视为null。相反,我在我的应用程序中设置了根视图控制器的导航项标题:didFinishLaunchingWithOptions:方法,在我调用setViewControllers:之前,并修复了它。
答案 3 :(得分:0)
尝试以下代码段。它适合我!
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Image.png"] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar bringSubviewToFront:[self.navigationController.navigationItem backBarButtonItem]];
答案 4 :(得分:0)
如果您是傻瓜并错误地将视图初始化为模态而不是将视图推送到导航控制器,也会发生这种情况。
oops:[self presentModalViewController:navController animated:YES]; 意思是:[self.navigationController pushViewController:controller animated:YES];