如何返回Objective-C中的前一个视图?

我是iOS编程的初学者,我想实现回到主视图的function。

我使用这个代码:

-(IBAction)onclickhome:(id)sender { [self.navigationController popViewControllerAnimated:YES]; } 

我已经使用导航控制器在主页button单击事件,但它不跳转到主屏幕。

你有什么build议和源代码适用于我的代码?

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

你是什​​么意思

我已经使用导航控制器在主页button单击事件,但它不跳转到主屏幕

如果你想popup到根控制器,你可以使用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 

如果你已经build立了一个UINavigationController并且它的根控制器被称为A,那么如果你从A到B然后从B到C导航,你有两种可能性来回到前一个控制器(你可以有其他控制器,但是我可以列出主那些):

  • 使用popViewControllerAnimated从C导航回到popViewControllerAnimated
  • 使用popToRootViewControllerAnimated从C导航回到popToRootViewControllerAnimated

导航来回视图的最好方法是通过推送和popup导航视图控制器堆栈中的视图。

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

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

要回两个视图,请按照以下步骤操作

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

如果您不想回到您的预期视图,请在popup任何视图之前执行以下代码…

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

你应该看到一个像下面这样的数组,这将帮助你validation堆栈是否按照预期进行了维护。

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

我用

 [self dismissViewControllerAnimated:YES completion:nil]; 

因为别人的答案没有在Xcode 8.0中工作