我是iOS开发的新手。我首先为安卓开发了一个应用程序,现在正在将它移植到iOS上。有一件事我搞不懂,那就是如何让ViewController“消失”。我习惯了Android中的finish()方法。使用该方法,当前活动将自动结束,并向用户显示在打开当前屏幕之前打开的前一个屏幕。
我要做的就是在保存一条记录后让我的“创建”屏幕消失。在安卓世界里,我只需要调用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;发布于 2013-04-07 02:57:45
你是如何呈现这个视图控制器的?
你使用presentViewController:animated:completion:了吗?如果是这样的话,你想要这样的东西:
[self dismissViewControllerAnimated: YES];如果您使用的是pushViewController:animated:,那么您谈论的不是模式视图。您正在谈论的是一个推送到堆栈上的普通ViewController。要“撤消”此操作,您需要弹出视图控制器:
[self.navigationController popViewControllerAnimated: YES];发布于 2016-07-21 15:23:37
虽然finish()和[self dismissViewControllerAnimated:YES]在功能上类似,但并不完全相同,当我们在Android中调用finish()方法时,我们是程序化地告诉Android系统从内存中完全销毁活动,当我们覆盖onDestroy()活动生命周期回调并添加日志时,则在调用finish()时会显示日志。当系统需要资源时,也会调用onDestroy(),它通过完成活动来释放内存。但
[self dismissViewControllerAnimated: YES];不从内存中删除UIViewController实例,IOS中onDestroy()的等效回调方法是viewDidUnload(),该方法不会在消息dismissViewController上调用。我认为IOS系统只能在系统需要资源时才能为UIViewController实例释放内存,但我们不能通过编程方式做到这一点。
发布于 2019-03-13 18:39:27
在推送视图控制器之后,调用此方法
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!
}https://stackoverflow.com/questions/15854770
复制相似问题