后退按钮不出现在UINavigationController上

时间:2011-02-20 22:18:06

标签: objective-c cocoa-touch uiviewcontroller uinavigationcontroller uinavigationbar

我在AppDelegate中设置了UINavigationController:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {          
    // Add the navigation controller's view to the window and display.
    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

在我的RootViewController中,我将另一个视图推送到堆栈:

//Show the deals
    DealViewController *dvc = [[DealViewController alloc] initWithNibName:@"DealViewController" bundle:nil];
    [self.navigationController.navigationBar setHidden:NO];
    [self.navigationController pushViewController:dvc animated:YES];

视图显示,但没有后退按钮添加到导航栏。为什么这样,我该如何解决?

5 个答案:

答案 0 :(得分:24)

您是否在RootViewController中设置self.title?也许UINavigationController没有任何文本可以放在后退按钮上,所以它省略了它??

您是在DealViewController中设置hidesBackButton = YES还是backBarButtonItem = nil,还是定义了不同的leftBarButtonItem

答案 1 :(得分:4)

试试这个:

DetailViewController *detailViewController = [[DetailViewController alloc] init];
UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle : @"Back"
                                                         style : UIBarButtonItemStyleDone
                                                        target : nil
                                                        action : nil];
self.navigationItem.backBarButtonItem = back;
[self.navigationController pushViewController : detailViewController animated : YES];
[detailViewController release];

答案 2 :(得分:3)

您必须将导航控制器视为一组导航控制器,每个导航控制器控制一个充满信息的屏幕。 使用

实例化导航控制器
-(id)initWithRootViewController:(UIViewController *)rootViewController

方法。您在此调用中指定了根视图控制器。然后将导航控制器的视图作为子视图添加到窗口中,就像之前一样。

如果要显示第二个屏幕,请使用

按下堆栈上的另一个视图控制器
-(void)pushViewController:detailViewController animated:YES

方法

答案 3 :(得分:3)

使用presentModalViewController显示naviagtionController。像这样设置navagitionController栏按钮:

[navigationController.navigationBar.topItem setLeftBarButtonItem:
    [[[UIBarButtonItem alloc] initWithTitle: @"Back" 
                                      style: UIBarButtonItemStylePlain
                                     target: self
                                     action: @selector(dismisstheModal:)] autorelease]];

答案 4 :(得分:1)

这发生在我身上,因为在我的导航控制器的内容控制器中,我在viewDidLoad和另一个继承自我的内容控制器的类中设置了一些导航控制器行为,并且正在呈现的那个,我实现了viewDidLoad也是如此,忘记调用[super viewDidLoad],从而导致我覆盖了我设置导航控制器按钮的基类viewDidLoad。 Oooops。