【问题标题】:Splash Screen (Welcome) before Tab View选项卡视图之前的启动画面(欢迎)
【发布时间】:2016-04-27 02:45:14
【问题描述】:

我正在尝试在 Swift 中编写一个 iOS 应用程序,其中在标签栏屏幕之前会有一个启动屏幕。

我看过:

但是它们都需要一个 nib 文件,而我所有的 UI 都是在故事板中完成的。

这是我的主要问题: 网站上的代码是这样的:

ControllerName(nibName: "NibName", bundle: nil);

如果没有 nib 文件并使用故事板,我有什么办法可以做同样的事情吗?

【问题讨论】:

    标签: ios iphone swift uiviewcontroller uistoryboard


    【解决方案1】:

    假设您已经在情节提要中拥有TabBarController,您将在它旁边添加另一个视图控制器。

    然后您将单击新视图,并在属性检查器中,选中“是初始视图控制器”。

    这使得新视图成为应用打开时出现的第一件事。要转到 tabBarController,我可能会在第一个视图上有一些按钮,该按钮只有一个到 TabBarController 的 segue(控制拖动)。

    【讨论】:

    • 或大约一秒钟后自动转换。
    【解决方案2】:

    你可以做的是下面的例子,其中标签栏视图控制器被设置为你可以的初始视图控制器

    1. 将另一个 UIViewController 从对象库拖放到情节提要object library

    2. 单击 UIViewController 并为其分配 StoryboardID StoryboardID.

    3. 在您的第一个视图控制器类中,您可以访问情节提要并创建一个新视图控制器的实例,您之前拖放该视图控制器,使用情节提要 ID,您可以在 viewDidAppear 覆盖函数中执行此操作并呈现新的以模态方式查看控制器。

      override func viewDidAppear(animated: Bool) { 
      let myStoryboard = self.storyboard
          let modalViewController = myStoryboard?.instantiateViewControllerWithIdentifier("ModalViewControlllerID")
          presentViewController(modalViewController!, animated: true, completion: nil)
        }
      

    【讨论】:

      【解决方案3】:

      要以与使用 ControllerName(nibName: "NibName", bundle: nil) 的 xib 类似的方式从情节提要中以编程方式实例化 viewController,它是:

      UIStoryboard(name: "StoryboardName", bundle: nil)
                  .instantiateViewController(withIdentifier: "ControllerName")
      

      但你一定不要忘记在 Storyboard ID 下的 storyboard 中设置 viewController 的任意标识符:

      【讨论】:

        【解决方案4】:

        将navigationController和viewController拖到storyboard,将navigationcontroller作为初始viewcontroller,然后从viewcontroller推送tabbarcontroller。

        谢谢, 纳达·贾马尔

        【讨论】:

          【解决方案5】:

          我只需要为我的项目做同样的事情。这是我的解决方案。

          我创建了一个 ViewController 并将其设置为 Main.storyboard 中的 Storyboard 入口点。我以前有一个 TabViewController 有各种设置,只需要在那里进行 1 次更改。

          TabBarController 应该有一个 StoryboardID,我命名为“TabBarID”。

          我创建了一个新的 LaunchViewController swift 文件,并将新的 ViewController 添加到我的 Main.storyboard 并在 Main.storyboard 中分配它。

          这是那个类。非常简单,有一个计时器,一旦超过阈值,TabBarViewController 就会全屏显示。

          class LaunchViewController: UIViewController {
              
              var timer = Timer()
              var time = 0
              var threshold = 2
              
              override func viewDidLoad() {
                  super.viewDidLoad()
                  view.backgroundTheme(theme: .orangeWhite)
                  Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(updateTimer)), userInfo: nil, repeats: true)
              }
              
              @objc func updateTimer() {
                  time += 1
                  if time > threshold {
                      timer.invalidate()
                      guard let storyboard = self.storyboard else {
                          //failed to find storyboard
                          return
                      }
                      
                      let tabBarController = storyboard.instantiateViewController(identifier: "TabBarID")
                      tabBarController.modalPresentationStyle = .fullScreen
                      present(tabBarController, animated: true, completion: nil)
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2014-01-16
            • 2021-08-13
            • 1970-01-01
            • 2012-09-04
            • 1970-01-01
            • 2017-07-08
            • 2015-10-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多