我对iOS开发相对较新。我首先开发了Android应用程序,现在将其移植到iOS。我无法弄清楚的一件事是如何使ViewController
“消失”。我已经习惯了Android中的finish()
方法。使用该方法,当前活动自行结束,并向用户显示在打开当前屏幕之前打开的上一个屏幕。
我想要完成的是在保存记录后让我的“创建”屏幕消失。在Android世界中,我只会调用finish()
方法,这将被处理。什么是iOS等价物?
我在我的iOS应用程序中尝试了以下代码,希望视图能够被动画化。
[self.navigationController popToRootViewControllerAnimated:YES];
编辑: 观点如下:
SettingsViewController *vc = [[SettingsViewController alloc] initWithNibName:@"SettingsView"];
controllers = [NSArray arrayWithObject:vc];
self.sideMenu.navigationController.viewControllers = controllers;
[self.sideMenu setMenuState:MFSideMenuStateClosed];
其中controllers
定义如下:
NSArray *controllers = nil;
答案 0 :(得分:16)
你是如何呈现这个视图控制器的?
您使用presentViewController:animated:completion:
了吗?如果是这样,你想要这样的东西:
[self dismissViewControllerAnimated: YES];
如果您使用pushViewController:animated:
,则不是在谈论模态视图。您正在谈论您推入堆栈的普通ViewController。要“撤消”这个,你需要弹出视图控制器:
[self.navigationController popViewControllerAnimated: YES];
答案 1 :(得分:1)
尽管finish()
和[self dismissViewControllerAnimated:YES]
在功能方面相似,但它们并不完全相同,但当我们在Android中调用finish()
方法时,我们以编程方式告诉Android系统完全从内存中销毁活动,当我们覆盖onDestroy()
活动生命周期回调并添加日志时,会在调用finish()
时显示日志。当系统需要资源时,也会调用onDestroy()
,并通过完成活动释放内存。但是
[self dismissViewControllerAnimated: YES];
不会从内存中删除UIViewController实例,IOS中onDestroy()的等效回调方法是viewDidUnload(),它不会在消息dismissViewController上调用。我认为IOS系统只能在系统需要资源时释放UIViewController实例的内存,但我们不能以编程方式执行此操作。
答案 2 :(得分:0)
在pushViewController之后尝试此代码
func finish(){
var navigationArray = self.navigationController?.viewControllers //To get all UIViewController stack as Array
navigationArray!.remove(at: (navigationArray?.count)! - 2) // To remove previous UIViewController
self.navigationController?.viewControllers = navigationArray!
}