Ios 切换屏幕/视图控制器
我是一名安卓开发者,对iOS开发不太熟悉,我想我有一个非常基本的问题 我已经了解到,现在的最佳实践是为多个视图控制器使用多个故事板,并以编程方式浏览它们,如:Ios 切换屏幕/视图控制器,ios,swift,storyboard,Ios,Swift,Storyboard,我是一名安卓开发者,对iOS开发不太熟悉,我想我有一个非常基本的问题 我已经了解到,现在的最佳实践是为多个视图控制器使用多个故事板,并以编程方式浏览它们,如: let storyboard = UIStoryboard(name: "Main", bundle: nil) let viewController = storyboard.instantiateViewController(withIdentifier :"viewController") as! UIViewController
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier :"viewController") as! UIViewController
self.present(viewController, animated: true, completion: nil)
假设我有两个故事板。在第一个视图中,我只有一个ViewController,在第二个视图中,我有两个ViewController。我用第一个故事板和它的ViewController启动这个应用程序。在点击一个按钮之后,我想使用上面的代码向下一个故事板展示它的第一个ViewController。下一个ViewController显示时没有任何问题,但是第一个故事板ViewController发生了什么?它是否仍然存在于堆栈中,或者被终止,或者类似的东西
我问这个是因为如果我打电话
dismiss(animated: true, completion: nil)
在第二个故事板的第一个ViewController中,ViewController将消失,而旧的ViewController将再次显示。
另外,如果我在第二个情节提要中的第一个ViewController中显示第二个情节提要中的第二个ViewController时调用此选项,则第一个ViewController也将消失,并显示第一个情节提要中的ViewController
在android系统中,如果我想启动下一个屏幕/活动,我可以使用:
startActivity(new Intent(CurrentActivity.this, NextActivity.class));
finish(); //to drop the current activity
当我进入NextActivity并单击back按钮时,整个应用程序将最小化
我只是想确保在我的应用程序中不要建立一个巨大的ViewController堆栈。因此,我假设您希望使用
VC1->VC2->VC3
。当您呈现VC3时,无需关闭VC2。这将创建一个导航堆栈。当您解除VC3时,VC2仍将存在,与解除VC2相同,VC1也将存在。如果您希望VC1显示VC3,则当您从VC1中解除VC2时,您需要从解除呼叫的完成块中显示VC3。因此,我假设您希望转到VC1->VC2->VC3
。当您呈现VC3时,无需关闭VC2。这将创建一个导航堆栈。当您解除VC3时,VC2仍将存在,与解除VC2相同,VC1也将存在。如果您希望VC1显示VC3,当您从VC1中删除VC2时,您需要从删除调用的完成块中删除VC3。很抱歉,但如果Xcode使用自动布局,则使用多个故事板是一种不好的做法。
您只需使用自动布局
示例:如果您的视图控制器中有一个UIButton,并且您希望根据视图控制器的视图减少和增加。然后添加我在下面建议的约束
let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "YourSecondVCIdentifier")
self.present(secondVC!, animated: true, completion: nil)
self.dismiss(animated: true, completion: nil)
很抱歉这么说,但如果Xcode使用自动布局,那么使用多个故事板是一种不好的做法 您只需使用自动布局 示例:如果您的视图控制器中有一个UIButton,并且您希望根据视图控制器的视图减少和增加。然后添加我在下面建议的约束
let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "YourSecondVCIdentifier")
self.present(secondVC!, animated: true, completion: nil)
self.dismiss(animated: true, completion: nil)
谢谢你的回答。我知道如何演示ViewController。但是,如果我开始另一个VC,我是否必须解雇每一个VC?比如:VC1->VC2(解除VC1)->VC3(解除VC2)->实例化VC2(解除VC3)等等,如果我有100个vc呢。如果我展示一次,它们是否都会在堆栈上?我想你需要考虑一下应用程序的导航。如果你只是从一个VC跳到另一个VC,那么它就不会与通常的iOS流程保持一致。通常情况下,你会向VC展示一个用户在那里做的事情,然后拒绝它。或者您有一个
UINavigationController
,它将VC推到堆栈上,用户可以向前或向后导航。或者一个导航抽屉来切换VC。但你的电流最终会让人痛苦。好吧,听起来不错。如果我的应用程序有两个主要部分会怎么样。。如登录/注册/条款等