8

我是 iOS 编程的初学者,我想实现返回主视图的功能。

我用过这段代码:

-(IBAction)onclickhome:(id)sender
{

    [self.navigationController popViewControllerAnimated:YES];
}

我在主页按钮单击事件中使用了导航控制器,但它没有跳转到主屏幕。

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

4

3 回答 3

12

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

你是什​​么意思

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

?

如果你想弹出到根控制器,你可以使用popToRootViewControllerAnimated.

[self.navigationController popToRootViewControllerAnimated:YES];

来自 Apple 文档UINavigationController

popToRootViewControllerAnimated:

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

如果您设置了 aUINavigationController并且它的根控制器称为 A,那么如果您从 A 导航到 B,然后从 B 导航到 C,您有两种可能返回到前一个控制器(您可以拥有其他控制器,但我列出了主要的控制器) ):

  • 从 C 导航回 B 与popViewControllerAnimated
  • 从 C 导航回 ApopToRootViewControllerAnimated
于 2012-07-09T09:55:13.090 回答
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>"
于 2013-12-01T04:24:02.767 回答
4

我用

[self dismissViewControllerAnimated:YES completion:nil];

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

于 2016-12-30T11:55:29.930 回答