2

我有一个带有 UIViewController 和一些按钮的故事板。其中一个按钮对 UINavigationController 进行模态搜索,并且 NavController 中嵌入了 UITableViewController。当我单击主屏幕上的按钮时,它会前进到 NavController,但没有返回按钮。

那么如何获得后退按钮呢?我尝试了几件事,但没有运气。

谢谢您的帮助!!

4

4 回答 4

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];

}
于 2012-10-18T18:50:27.420 回答
1

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

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

于 2012-10-18T18:47:59.637 回答
1

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

您可以通过创建一个“后退”按钮自己添加一个(您需要一个看起来像后退按钮的图像,或者在代码中绘制一个)并将其添加为 TableViewController 的导航项的 leftBarButtonItem,但我不会那样做. 模态显示的视图控制器不应该“返回”。相反,按钮应该是“关闭”、“关闭”或“取消”之类的东西。

于 2012-10-18T18:58:45.293 回答
0

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

self.title=@"一个标题"; self.navigationController.navigationBarHidden=YES;

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

这一切似乎有点明显,但我绕着圈子试图用后退按钮显示导航栏!

于 2014-10-28T12:05:01.873 回答