9

我对 iOS 开发比较陌生。我首先为 Android 开发了一个应用程序,现在正在将其移植到 iOS。我不知道的一件事是如何ViewController“走开”。我习惯了finish()Android中的方法。使用该方法,当前活动自行结束,并向用户呈现在打开当前屏幕之前打开的前一个屏幕。

我想要完成的是在保存记录后让我的“创建”屏幕消失。在 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;
4

3 回答 3

17

你是如何呈现这个视图控制器的?

你用了presentViewController:animated:completion:吗?如果是这样,你想要这样的东西:

[self dismissViewControllerAnimated: YES];

如果您正在使用pushViewController:animated:,那么您不是在谈论模态视图。您正在谈论您推入堆栈的普通 ViewController。要“撤消”此操作,您需要弹出视图控制器:

[self.navigationController popViewControllerAnimated: YES];
于 2013-04-06T18:57:44.703 回答
1

虽然finish()[self dismissViewControllerAnimated:YES]在功能上相似,但它们并不完全相同,当我们finish()在Android中调用方法时,我们是在编程告诉Android系统从内存中完全销毁活动,当我们覆盖onDestroy()活动生命周期回调并添加时一个日志,然后在finish()调用时显示日志。onDestroy()当系统需要资源并通过完成活动来释放内存时也会调用。但

[self dismissViewControllerAnimated: YES];

不会从内存中删除 UIViewController 实例,IOS 中 onDestroy() 的等效回调方法是 viewDidUnload() ,它不会在消息 dismissViewController 上调用。我认为 IOS 系统只能在系统需要资源时为 UIViewController 实例释放内存,但我们不能以编程方式这样做。

于 2016-07-21T07:23:37.073 回答
0

推送您的视图控制器后调用此方法

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!
}
于 2019-03-13T10:39:27.140 回答