UINavigationController没有显示后退按钮

时间:2012-10-18 18:30:01

标签: iphone objective-c ios xcode ipad

我有一个带有一些按钮的UIViewController的故事板。其中一个按钮对UINavigationController进行模态转换,NavController中嵌入了UITableViewController。当我单击主屏幕上的按钮时,它会前进到NavController,但没有后退按钮。

那么如何获得后退按钮?我尝试了一些东西,但没有运气。

感谢您的帮助!!

4 个答案:

答案 0 :(得分:8)

如果您以模态方式呈现导航控制器,则tableview控制器是新导航控制器推送的唯一视图控制器。在这种情况下,不会有也不应该是后退按钮。

最好通过tableview控制器向导航栏添加取消/完成按钮,这会取消模态视图。

在tableView控制器viewDidLoad:方法中:

UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonTapped:)];
self.navigationItem.leftBarButtonItem = done;

//Release done if not using ARC

然后添加(最简单的实现)一个dismiss方法:

- (void)doneButtonTapped:(id)sender {

    [self.navigationController dismissViewControllerAnimated:YES completion:nil];

}

答案 1 :(得分:1)

UINavigationViewController仅管理一堆视图控制器。你将viewController推入堆栈,当你点击“返回”时,你会从堆栈中弹出一个视图。

由于您以模态方式呈现UINavigationController,因此它不知道之前呈现的内容。获得所需行为的正确方法是将主UIViewController设置为UINavigationController的根视图控制器。当用户点击一个按钮时,您将新的UITableViewController推送到UINavigationController的堆栈上。

答案 2 :(得分:1)

您的UITableViewController子类是UINavigationController的根视图控制器。因此,后退按钮不会自动显示。如果点击表格行将第二个视图控制器推入堆栈,则第二个视图控制器将在其导航栏中显示后退按钮。所以,这是预期的行为。

您可以通过创建一个“后退”按钮(您需要一个看起来像后退按钮的图像,或者在代码中绘制一个)并添加它作为TableViewController的navigationItem的leftBarButtonItem,但我不会那样做。以模态方式呈现的视图控制器不应该“返回”。该按钮应该类似于“关闭”,“关闭”或“取消”。

答案 3 :(得分:0)

在我的情况下,我有一个rootviewcontoller没有可见的导航栏,但推送的viewcontollers都需要一个带后退按钮的导航栏,但它们没有显示。我在Xcode 6.1工作。在rootviewcontroller的viewDidAppear中,我设置了:

self.title = @“a title”; self.navigationController.navigationBarHidden = YES;

在需要导航栏可见的推送视图控制器的viewDidLoad中,我设置:     self.navigationController.navigationBarHidden = NO;     self.navigationItem.hidesBackButton = NO;

这一切看起来都有点明显但是我绕着圈子试图用后退按钮显示导航栏!