我有一个带有 UIViewController 和一些按钮的故事板。其中一个按钮对 UINavigationController 进行模态搜索,并且 NavController 中嵌入了 UITableViewController。当我单击主屏幕上的按钮时,它会前进到 NavController,但没有返回按钮。
那么如何获得后退按钮呢?我尝试了几件事,但没有运气。
谢谢您的帮助!!
我有一个带有 UIViewController 和一些按钮的故事板。其中一个按钮对 UINavigationController 进行模态搜索,并且 NavController 中嵌入了 UITableViewController。当我单击主屏幕上的按钮时,它会前进到 NavController,但没有返回按钮。
那么如何获得后退按钮呢?我尝试了几件事,但没有运气。
谢谢您的帮助!!
如果您以模态方式呈现导航控制器,那么 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];
}
UINavigationViewController 只管理一堆视图控制器。您将 viewController 推入堆栈,当您点击“返回”时,您将从堆栈中弹出一个视图。
由于您以模态方式呈现 UINavigationController,因此它不知道之前呈现的内容。获得所需行为的正确方法是将主 UIViewController 设置为 UINavigationController 的根视图控制器。当用户点击一个按钮时,您将新的 UITableViewController 推送到 UINavigationController 的堆栈中。
您的 UITableViewController 子类是 UINavigationController 的根视图控制器。因此,不会自动显示后退按钮。如果点击表格行将第二个视图控制器推入堆栈,那么第二个视图控制器将在其导航栏中显示一个后退按钮。所以,这是预期的行为。
您可以通过创建一个“后退”按钮自己添加一个(您需要一个看起来像后退按钮的图像,或者在代码中绘制一个)并将其添加为 TableViewController 的导航项的 leftBarButtonItem,但我不会那样做. 模态显示的视图控制器不应该“返回”。相反,按钮应该是“关闭”、“关闭”或“取消”之类的东西。
在我的情况下,我有一个没有可见导航栏的 rootviewcontoller,但推送的 viewcontoller 都需要一个带有后退按钮的导航栏,但它们没有显示。我在 Xcode 6.1 中工作。在 rootviewcontroller 的 viewDidAppear 中,我设置:
self.title=@"一个标题"; self.navigationController.navigationBarHidden=YES;
在需要导航栏可见的推送视图控制器的 viewDidLoad 中,我设置: self.navigationController.navigationBarHidden=NO; self.navigationItem.hidesBackButton=否;
这一切似乎有点明显,但我绕着圈子试图用后退按钮显示导航栏!