ios - 使用 "main"作为 Storyboard失败,因为 View Controller 不是主 Storyboard

标签 ios swift

我将页面 View Controller 嵌入到容器 View 中。包含容器 View 的 View Controller 不是主视图 Controller ,因此我的程序崩溃了。

import UIKit

class CarsSwipe: UIPageViewController,  UIPageViewControllerDataSource, UIPageViewControllerDelegate {

  lazy var viewControllersList:[UIViewController] = {
    let sb = UIStoryboard(name: "main", bundle: nil).instantiateViewController(withIdentifier: "carsSwipe")

    let vc1 = sb.instantiateViewController(withIdentifier: "blueView")
    let vc2 = sb.instantiateViewController(withIdentifier: "orangeView")
    let vc3 = sb.instantiateViewController(withIdentifier: "blackView")
    return [vc1, vc2, vc3]
   }()

  func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

    guard let vcIndex = viewControllersList.firstIndex(of:  viewController) else {return nil}

    let previousIndex = vcIndex - 1
    guard previousIndex >= 0 else {return nil}
    guard viewControllersList.count > previousIndex  else {return  nil}

    return viewControllersList[previousIndex]
   }

  func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    guard let vcIndex = viewControllersList.firstIndex(of: viewController) else {return nil}
    let nextIndex = vcIndex + 1
    guard viewControllersList.count != nextIndex else {return nil}
    guard viewControllersList.count > nextIndex  else {return nil}
    return viewControllersList[nextIndex]
  }

  override func viewDidLoad() {
    super.viewDidLoad()

    self.delegate = self
    self.dataSource = self

    if let firsViewControlller = viewControllersList.first {
      self.setViewControllers([firsViewControlller], direction: .forward, animated: true, completion: nil)
    }
  }

}

我希望 PageViewController 在 View Controller 内的容器中滚动

最佳答案

错误在这一行:

let sb = UIStoryboard(name: "main", bundle: nil).instantiateViewController(withIdentifier: "carsSwipe")

删除 .instantiateViewController(withIdentifier: "carsSwipe") 并应成功编译。

因为下面代码中的 sb 不是 UIStoryboard 而是 View Controller :

let vc1 = sb.instantiateViewController(withIdentifier: "blueView")
let vc2 = sb.instantiateViewController(withIdentifier: "orangeView")
let vc3 = sb.instantiateViewController(withIdentifier: "blackView")

关于ios - 使用 "main"作为 Storyboard失败,因为 View Controller 不是主 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56394775/

相关文章:

ios - 确定核心数据模型中何时有新版本

ios - 如何在 iPhone 中禁用横向但在 iPad 上保持启用?

swift - tuple 是 Swift 中的值类型还是引用类型?

具有网络和多线程的 iOS CoreData

iOS - 在 swift 中使用 ObjectMapper 映射根 JSON 数组

SwiftUI – 在 View 中向用户显示变量

ios - 没有 VOIP 的 CallKit

android - 我如何告诉我的老板使用 Xamarin 不会让它更快

iphone - libz.1.dylib 框架的 Apple Mach-O 链接器错误

ios - UIView 扩展获取 UITableViewCell?