如何回到Objective-C中的上一个视图?

时间:2012-07-09 09:43:49

标签: objective-c ios uinavigationcontroller

我是iOS编程的初学者,我想实现回到家庭视图的功能。

我使用了这段代码:

-(IBAction)onclickhome:(id)sender
{

    [self.navigationController popViewControllerAnimated:YES];
}

我在主页按钮点击事件中使用了navigationController,但它没有跳转到主屏幕。

您有任何适用于我的代码的建议和源代码吗?

3 个答案:

答案 0 :(得分:10)

我不确定我理解你的问题。

你的意思是什么

  

我在主页按钮点击事件中使用了navigationController,但确实如此   不要跳到主屏幕

如果要弹出到根控制器,可以使用popToRootViewControllerAnimated

[self.navigationController popToRootViewControllerAnimated:YES];

来自UINavigationController的Apple文档

popToRootViewControllerAnimated:

Pops all the view controllers on the stack except the root view controller and updates the display.
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated

如果您设置了UINavigationController并且其根控制器名为A,那么如果您从A导航到B然后从B导航到C,则有两种可能性可以返回到之前的控制器(您可以有其他人,但我列出了主要的):

  • 使用popViewControllerAnimated
  • 从C导航回到B.
  • 使用popToRootViewControllerAnimated
  • 从C导航回到A.

答案 1 :(得分:6)

导航视图的最佳方法是从导航视图控制器堆栈中推送和弹出视图。

要返回一个视图,请使用下面的代码。这将确保保留视图之间的平滑过渡。

UINavigationController *navigationController = self.navigationController;
[navigationController popViewControllerAnimated:YES];

要返回两个视图,请执行以下操作

UINavigationController *navigationController = self.navigationController;
[navigationController popViewControllerAnimated:NO];
[navigationController popViewControllerAnimated:YES];

如果您没有回到预期视图,请在弹出任何视图之前执行以下代码...

UINavigationController *navigationController = self.navigationController;
NSLog(@"Views in hierarchy: %@", [navigationController viewControllers]);

你应该看到一个类似下面的数组,它将帮助你验证堆栈是否按预期维护。

Views in hierarchy: (
    "<Main_ViewController: 0x1769a3b0>",
    "<First_ViewController: 0x176a5610>",
    "<Second_ViewController: 0x176af180>"

答案 2 :(得分:3)

我用

[self dismissViewControllerAnimated:YES completion:nil];

因为其他答案在Xcode 8.0中没有起作用