iOS相当于Android完成()

时间:2013-04-06 18:53:36

标签: objective-c uiviewcontroller

我对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;

3 个答案:

答案 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!
}