切换屏幕/视图控制器

时间:2017-06-28 19:16:06

标签: ios swift storyboard

我是一名Android开发人员,对iOS开发很陌生,并且我猜有一个非常基本的问题。

我已经读过,现在最好的做法是为多个视图控制器使用多个故事板,并以编程方式导航它们,如:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier :"viewController") as! UIViewController
self.present(viewController, animated: true, completion: nil)

假设我有两个故事板。在第一个我只有一个ViewController,在第二个我有两个ViewControllers。我使用第一个故事板和ViewController启动应用程序。在点击按钮之后,我想使用上面的代码使用其第一个ViewController呈现下一个故事板。下一个ViewController显示没有任何问题,但第一个故事板ViewController发生了什么?它是否仍然存在于堆栈中或被终止或类似的东西?

我问这个是因为如果我打电话

dismiss(animated: true, completion: nil)

在第二个故事板的第一个ViewController中,ViewController消失,旧的再次显示。 另外,如果我想在第二个故事板的第一个ViewController中的第二个故事板中显示第二个ViewController,第一个ViewController也会消失,并从第一个故事板中呈现ViewController。

在android中,如果我想开始下一个屏幕/活动,我会这样做:

startActivity(new Intent(CurrentActivity.this, NextActivity.class));
finish(); //to drop the current activity

当我在NextActivity内部并单击后退按钮时,整个应用程序将最小化。

我只想确保不在我的应用程序中构建大量的ViewControllers。

2 个答案:

答案 0 :(得分:0)

所以我假设你想去VC1 -> VC2 -> VC3。当你呈现VC3时,没有必要解雇VC2。这会创建一个导航堆栈。当您关闭VC3时,VC2仍然存在并且与解除VC2相同,VC1将在那里。如果您想要VC1呈现VC3,当您从VC1中解除VC2时,您需要从解雇呼叫的完成块中显示VC3。

答案 1 :(得分:0)

很抱歉这样说但是如果Xcode正在使用自动布局启动,则使用多个故事板是不好的做法

您只需使用自动布局。

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

  1. 为Button提供一些宽高比。
  2. 从视图界面构建器左侧的层次结构访问按钮,然后按住Ctrl键并从按钮拖动到父视图,按住命令选择“相等高度”,“垂直放置在容器中”,“水平放置在容器中”和然后单击“添加约束”
  3. 然后选择按钮开放尺寸检查器并双击“高度约束”并根据需要给出乘数(注意:它与父视图的高度成正比)。
  4. 如果您想要移动父视图中心左侧的按钮,请双击“对齐中心X”并将乘数低于1(根据您的需要)。
  5. 如果您想将按钮移到中心上方,请将乘数设置为低于1,以“对齐中心Y”约束。
  6. 就是这样。跑步和检查。

    如果要在两个ViewControllers之间切换

    1. 在第一个ViewController按钮的操作中写下面的代码。

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

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