Ios 切换屏幕/视图控制器

Ios 切换屏幕/视图控制器,ios,swift,storyboard,Ios,Swift,Storyboard,我是一名安卓开发者,对iOS开发不太熟悉,我想我有一个非常基本的问题 我已经了解到,现在的最佳实践是为多个视图控制器使用多个故事板,并以编程方式浏览它们,如: let storyboard = UIStoryboard(name: "Main", bundle: nil) let viewController = storyboard.instantiateViewController(withIdentifier :"viewController") as! UIViewController

我是一名安卓开发者,对iOS开发不太熟悉,我想我有一个非常基本的问题

我已经了解到,现在的最佳实践是为多个视图控制器使用多个故事板,并以编程方式浏览它们,如:

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,并且您希望根据视图控制器的视图减少和增加。然后添加我在下面建议的约束

  • 给按钮一些纵横比
  • 从interface builder左侧的视图层次访问按钮,然后按住ctrl键并从按钮拖动到父视图,通过按住命令选择“等高”、“容器中垂直居中”、“容器中水平居中”,然后单击“添加约束”
  • 然后选择“打开尺寸检查器”按钮,双击“高度约束”,并根据需要提供乘数(注意:它与父视图的高度成正比)
  • 如果您想移动父视图中心左侧的按钮,请双击“对齐中心X”,并在1下方给出乘数(根据您的需要)
  • 如果要将按钮移到中心上方,则将“对齐中心Y”约束的乘数设置为1以下
  • 就这样。跑过去检查一下

    如果要在两个ViewController之间切换

  • 在第一个ViewController按钮的操作中编写以下代码

        let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "YourSecondVCIdentifier")
    
        self.present(secondVC!, animated: true, completion: nil)
    
  • 并在SecondViewController按钮的操作中编写以下代码

        self.dismiss(animated: true, completion: nil)
    

  • 很抱歉这么说,但如果Xcode使用自动布局,那么使用多个故事板是一种不好的做法

    您只需使用自动布局

    示例:如果您的视图控制器中有一个UIButton,并且您希望根据视图控制器的视图减少和增加。然后添加我在下面建议的约束

  • 给按钮一些纵横比
  • 从interface builder左侧的视图层次访问按钮,然后按住ctrl键并从按钮拖动到父视图,通过按住命令选择“等高”、“容器中垂直居中”、“容器中水平居中”,然后单击“添加约束”
  • 然后选择“打开尺寸检查器”按钮,双击“高度约束”,并根据需要提供乘数(注意:它与父视图的高度成正比)
  • 如果您想移动父视图中心左侧的按钮,请双击“对齐中心X”,并在1下方给出乘数(根据您的需要)
  • 如果要将按钮移到中心上方,则将“对齐中心Y”约束的乘数设置为1以下
  • 就这样。跑过去检查一下

    如果要在两个ViewController之间切换

  • 在第一个ViewController按钮的操作中编写以下代码

        let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "YourSecondVCIdentifier")
    
        self.present(secondVC!, animated: true, completion: nil)
    
  • 并在SecondViewController按钮的操作中编写以下代码

        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。但你的电流最终会让人痛苦。好吧,听起来不错。如果我的应用程序有两个主要部分会怎么样。。如登录/注册/条款等