Ios 跳转到另一个故事板

Ios 跳转到另一个故事板,ios,swift3,storyboard,Ios,Swift3,Storyboard,我想发布另一个与iPad相关的故事板,但当我运行代码时,我会收到致命错误 这是我的密码 class pageVC : UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate { let pageVC = UIPageControl() lazy var VCArr : [UIViewController] = { return [self.VCInstance(nam

我想发布另一个与iPad相关的故事板,但当我运行代码时,我会收到致命错误

这是我的密码

class pageVC : UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate {



let pageVC = UIPageControl()
lazy var VCArr : [UIViewController] = {

    return [self.VCInstance(name : "FirtsVC"),
            self.VCInstance(name : "SecondVC"),
            self.VCInstance(name :"ThirdVC"),
            self.VCInstance(name :"FourthVC"),
            self.VCInstance(name :"FivethVC")]

}()

private func VCInstance(name : String) -> UIViewController {
    let modelName = UIDevice.current.modelName
    if modelName == "iPad Mini 3" {

        return UIStoryboard(name : "ipadmini" , bundle : nil).instantiateViewController(withIdentifier: name)


    }else {

    return UIStoryboard(name : "Main" , bundle : nil).instantiateViewController(withIdentifier: name)

    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    self.dataSource = self
    self.delegate = self



    let modelName = UIDevice.current.modelName
    print(modelName)
    if modelName == "iPad Mini 3" {
        print("OK")


        let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini" , bundle: nil)
        let viewController = mainStoryboard.instantiateViewController(withIdentifier: "pageVC")
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window?.rootViewController = viewController


    }


    let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
    if launchedBefore  {
        print("Not first launch!")
        print("Should Launch MainTabBarController!")



    } else {
        print("First launch, setting UserDefault.")
        UserDefaults.standard.set(true, forKey: "launchedBefore")
    }
    var shouldAutorotate: Bool {
        return false
    }
    var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }

    func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let value =  UIInterfaceOrientation.portrait.rawValue
        UIDevice.current.setValue(value, forKey: "orientation")
        UIViewController.attemptRotationToDeviceOrientation()
    }
    func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return [UIInterfaceOrientationMask.portrait ]
    }
    if VCArr.first != nil {

        print("first Page Reached!")
    }

    if let firstVC = VCArr.first {
        setViewControllers([firstVC] , direction: .forward , animated: true, completion: nil)

    }


}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let view = self.pageVC.currentPage
    for view in self.view.subviews {
        if view is UIScrollView {
            let pageVC = UIPageControl()
            self.pageVC.pageIndicatorTintColor = UIColor.lightText
            self.pageVC.currentPageIndicatorTintColor = UIColor.white
            self.pageVC.backgroundColor = UIColor.white
            self.pageVC.numberOfPages = VCArr.count
            self.pageVC.center = self.view.center
            self.view.addSubview(self.pageVC)
            pageVC.layer.position.y = self.view.frame.height - 150;
        }else if view is UIPageControl{
            view.backgroundColor = UIColor.clear
            pageVC.numberOfPages = 5
            pageVC.center = self.view.center
            pageVC.layer.position.y = self.view.frame.height - 100 ;

        }
    }

}




public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?{
    guard let viewControllerIndex = VCArr.index(of: viewController) else {
        return nil



    }




    let previousIndex = viewControllerIndex-1
    guard previousIndex >= 0  else {
        return nil
    }

    guard VCArr.count > previousIndex else {
        return nil
    }


    return VCArr[previousIndex]
}




public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?{
    guard let viewControllerIndex = VCArr.index(of: viewController) else {
        return nil
    }

    let nextIndex = viewControllerIndex+1
    guard nextIndex < VCArr.count
        else {
            return nil
    }

    guard VCArr.count > nextIndex else {
        return nil
    }




    return VCArr[nextIndex]
}




 public func presentationCount(for pageViewController: UIPageViewController) -> Int{
    return VCArr.count

}


 public func presentationIndex(for pageViewController: UIPageViewController) -> Int{
    guard let firstViewController = viewControllers?.first , let firstViewControllerIndex = VCArr.index(of: firstViewController) else {


        return 0
    }
        let firstIndex = firstViewControllerIndex - 1
        guard firstIndex >= VCArr.count  else {
            return VCArr.count



    }

    return firstViewControllerIndex
}
public func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    self.pageVC.currentPage = pageViewController.viewControllers!.first!.view.tag

 if(viewControllers!.first?.view.tag == 4 ) {

    if (VCArr.last!.isViewLoaded)

    {
        let modelName = UIDevice.current.modelName
        if modelName == "iPad Mini 3" {
            print("OK")


            let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini" , bundle: nil)
            let viewController = mainStoryboard.instantiateViewController(withIdentifier: "FivethVC")
            let appDelegate = UIApplication.shared.delegate as! AppDelegate
            appDelegate.window?.rootViewController = viewController


        }
        else {


        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main" , bundle: nil)
        let viewController = mainStoryboard.instantiateViewController(withIdentifier: "FivethVC")
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window?.rootViewController = viewController
        print("Last Page Reached!!!")
        }
    }

    }
}





}



public extension UIDevice
      {
var modelName: String {
    var systemInfo = utsname()
    uname(&systemInfo)
    let machineMirror = Mirror(reflecting: systemInfo.machine)
    let identifier = machineMirror.children.reduce("") { identifier, element in
        guard let value = element.value as? Int8 , value != 0 else { return identifier }
        return identifier + String(UnicodeScalar(UInt8(value)))
    }
    switch identifier {
    case "iPod5,1":
        return "iPod Touch 5"
    case "iPod7,1":
        return "iPod Touch 6"
    case "iPhone3,1", "iPhone3,2", "iPhone3,3":
        return "iPhone 4"
    case "iPhone4,1":
        return "iPhone 4s"
    case "iPhone5,1", "iPhone5,2":
        return "iPhone 5"
    case "iPhone5,3", "iPhone5,4":
        return "iPhone 5c"
    case "iPhone6,1", "iPhone6,2":
        return "iPhone 5s"
    case "iPhone7,2":
        return "iPhone 6"
    case "iPhone7,1":
        return "iPhone 6 Plus"
    case "iPhone8,1":
        return "iPhone 6s"
    case "iPhone8,2":
        return "iPhone 6s Plus"
    case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":
        return "iPad 2"
    case "iPad3,1", "iPad3,2", "iPad3,3":
        return "iPad 3"
    case "iPad3,4", "iPad3,5", "iPad3,6":
        return "iPad 4"
    case "iPad4,1", "iPad4,2", "iPad4,3":
        return "iPad Air"
    case "iPad5,3", "iPad5,4":
        return "iPad Air 2"
    case "iPad2,5", "iPad2,6", "iPad2,7":
        return "iPad Mini"
    case "iPad4,4", "iPad4,5", "iPad4,6":
        return "iPad Mini 2"
    case "iPad4,7", "iPad4,8", "iPad4,9":
        return "iPad Mini 3"
    case "iPad5,1", "iPad5,2":
        return "iPad Mini 4"
    case "iPad6,7", "iPad6,8":
        return "iPad Pro"
    case "AppleTV5,3":
        return "Apple TV"
    case "i386", "x86_64":
        return "Simulator"
    default:
        return identifier

    }
    }}
class pageVC:UIPageViewController、UIPageViewControllerDataSource、UIPageViewControllerDelegate{
设pageVC=UIPageControl()
惰性变量VCArr:[UIViewController]={
返回[self.VCInstance(名称:“FirtsVC”),
self.VCInstance(名称:“SecondVC”),
self.VCInstance(名称:“ThirdVC”),
self.VCInstance(名称:“FourthVC”),
self.VCInstance(名称:“FivethVC”)]
}()
private func VCInstance(名称:String)->UIViewController{
让modelName=UIDevice.current.modelName
如果modelName==“iPad Mini 3”{
返回UIStoryboard(名称:“ipadmini”,捆绑包:nil)。实例化eViewController(标识符:名称)
}否则{
返回UIStoryboard(名称:“Main”,捆绑包:nil)
}
}
重写func viewDidLoad(){
super.viewDidLoad()
self.dataSource=self
self.delegate=self
让modelName=UIDevice.current.modelName
打印(型号名称)
如果modelName==“iPad Mini 3”{
打印(“确定”)
let mainStoryboard:UIStoryboard=UIStoryboard(名称:“ipadmin”,捆绑包:nil)
让viewController=mainStoryboard.instanceeviewcontroller(带有标识符:“pageVC”)
让appDelegate=UIApplication.shared.delegate为!appDelegate
appDelegate.window?.rootViewController=viewController
}
让launchedBefore=UserDefaults.standard.bool(forKey:“launchedBefore”)
如果在发射之前{
打印(“不是第一次启动!”)
打印(“应启动MainTabBarController!”)
}否则{
打印(“第一次启动,设置UserDefault。”)
UserDefaults.standard.set(true,forKey:“launchedBefore”)
}
var应自动旋转:布尔{
返回错误
}
var支持的接口方向:UIInterfaceOrientationTask{
返回。肖像
}
func VIEW将出现(uu动画:Bool){
超级。视图将显示(动画)
let value=UIInterfaceOrientation.portrait.rawValue
UIDevice.current.setValue(值,forKey:“方向”)
UIViewController.attemptRotationToDeviceOrientation()
}
func支持的接口方向()->UIInterfaceOrientationTask{
返回[UIInterfaceOrientationMask.grait]
}
如果VCArr.first!=零{
打印(“到达第一页!”)
}
如果让firstVC=VCArr.first{
SetViewController([firstVC],方向:。正向,动画:true,完成:nil)
}
}
重写func viewdilayoutsubviews(){
super.viewDidLayoutSubviews()
让视图=self.pageVC.currentPage
用于在self.view.subview中查看{
如果视图是UIScrollView{
设pageVC=UIPageControl()
self.pageVC.pageIndicatorTintColor=UIColor.lightText
self.pageVC.currentPageIndicatorTintColor=UIColor.white
self.pageVC.backgroundColor=UIColor.white
self.pageVC.numberOfPages=VCArr.count
self.pageVC.center=self.view.center
self.view.addSubview(self.pageVC)
pageVC.layer.position.y=self.view.frame.height-150;
}否则,如果视图是UIPageControl{
view.backgroundColor=UIColor.clear
pageVC.numberOfPages=5
pageVC.center=self.view.center
pageVC.layer.position.y=self.view.frame.height-100;
}
}
}
public func pageViewController(uPageViewController:UIPageViewController,viewController在viewController:UIViewController之前)->UIViewController{
guard let viewControllerIndex=VCArr.index(of:viewController)else{
归零
}
设previousIndex=viewControllerIndex-1
guard previousIndex>=0其他{
归零
}
guard VCArr.count>上一个索引else{
归零
}
返回VCArr[以前的索引]
}
public func pageViewController(uPageViewController:UIPageViewController,viewController后的viewController:UIViewController)->UIViewController{
guard let viewControllerIndex=VCArr.index(of:viewController)else{
归零
}
设nextIndex=viewControllerIndex+1
警卫下一个索引nextIndex else{
归零
}
返回VCArr[nextIndex]
}
public func presentationCount(对于pageViewController:UIPageViewController)->Int{
返回VCArr.count
}
公共函数表示索引(对于pageViewController:UIPageViewController)->Int{
guard让firstViewController=viewControllers?首先,让firstViewControllerIndex=VCArr.index(of:firstViewController)else{
返回0
}
设firstIndex=firstViewControllerIndex-1
guard firstIndex>=VCArr.count else{
返回VCArr.count
}
返回firstViewControllerIndex
}
public func pageViewController(pageViewController:UIPageViewController,didFinishAnimating finished:Bool,PreviousViewController:[UIViewController],transitionCompleted completed:Bool){
self.pageVC.currentPage=pageViewController.viewControllers!.first!.view.tag
if(viewControllers!.first?.view.tag==4){
如果(VCArr.last!.isViewLoaded)
{
让modelName=UIDevice.current.modelName
如果modelName==“iPad Mini 3”{
打印(“确定”)
let mainStoryboard:UIStoryboard=UIStoryboard(名称:“ipadmin”,捆绑包:nil)
让viewController=mainStoryboard.instanceeviewcontroller(标识符为“FivethVC”)
让appDelegate=UIApplication.shared.delegate为!appDelegate
appDelegate.window?.rootViewController=viewController
}
否则{
let mainStoryboard:UIStoryboard=UIStoryboard(名称:“Main”,bundle:nil)
让viewController=mainStoryboard.instanceeviewcontroller(标识符为“FivethVC”)
class pageVC : UIPageViewController , UIPageViewControllerDataSource , UIPageViewControllerDelegate {



let pageVC = UIPageControl()
lazy var VCArr : [UIViewController] = {

    return [self.VCInstance(name : "FirtsVC"),
            self.VCInstance(name : "SecondVC"),
            self.VCInstance(name :"ThirdVC"),
            self.VCInstance(name :"FourthVC"),
            self.VCInstance(name :"FivethVC")]

}()

private func VCInstance(name : String) -> UIViewController {
    let modelName = UIDevice.current.modelName
    if modelName == "iPad Mini 3" {

        return UIStoryboard(name : "ipadmini" , bundle : nil).instantiateViewController(withIdentifier: name)


    }else {

    return UIStoryboard(name : "Main" , bundle : nil).instantiateViewController(withIdentifier: name)

    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    self.dataSource = self
    self.delegate = self

    let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
    if launchedBefore  {
        print("Not first launch!")
        print("Should Launch MainTabBarController!")

        let modelName = UIDevice.current.modelName
                print(modelName)
                if modelName == "iPad Mini 3" {
                    print("OK")


                    let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini", bundle: nil)
                                let viewController = mainStoryboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController
                                let appDelegate = UIApplication.shared.delegate as! AppDelegate
                                appDelegate.window?.rootViewController = viewController


                }else {
                    print("Not Ipad mini")
        }
        if modelName == "iPad Mini 3" {
            print("OK")


            let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini", bundle: nil)
            let viewController = mainStoryboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController
            let appDelegate = UIApplication.shared.delegate as! AppDelegate
            appDelegate.window?.rootViewController = viewController


        }else {

        /////Not First Time launch! reach mainTabBarController//////////

        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let viewController = mainStoryboard.instantiateViewController(withIdentifier: "MainTabBarController") as! UITabBarController
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window?.rootViewController = viewController

        }

    } else {
        print("First launch, setting UserDefault.")
        UserDefaults.standard.set(true, forKey: "launchedBefore")
    }
    //////Lock Rotation/////////
    var shouldAutorotate: Bool {
        return false
    }
    var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }

    func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let value =  UIInterfaceOrientation.portrait.rawValue
        UIDevice.current.setValue(value, forKey: "orientation")
        UIViewController.attemptRotationToDeviceOrientation()
    }
    func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return [UIInterfaceOrientationMask.portrait ]
    }
    ///////Lock Roration//////
    if VCArr.first != nil {

        print("first Page Reached!")
    }

    if let firstVC = VCArr.first {
        setViewControllers([firstVC] , direction: .forward , animated: true, completion: nil)

    }


}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let view = self.pageVC.currentPage
    for view in self.view.subviews {
        if view is UIScrollView {
            let pageVC = UIPageControl()
            self.pageVC.pageIndicatorTintColor = UIColor.lightText
            self.pageVC.currentPageIndicatorTintColor = UIColor.white
            self.pageVC.backgroundColor = UIColor.white
            self.pageVC.numberOfPages = VCArr.count
            self.pageVC.center = self.view.center
            self.view.addSubview(self.pageVC)
            pageVC.layer.position.y = self.view.frame.height - 150;
        }else if view is UIPageControl{
            view.backgroundColor = UIColor.clear
            pageVC.numberOfPages = 5
            pageVC.center = self.view.center
            pageVC.layer.position.y = self.view.frame.height - 100 ;

        }
    }

}




public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?{
    guard let viewControllerIndex = VCArr.index(of: viewController) else {
        return nil



    }




    let previousIndex = viewControllerIndex-1
    guard previousIndex >= 0  else {
        return nil
    }

    guard VCArr.count > previousIndex else {
        return nil
    }


    return VCArr[previousIndex]
}




public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?{
    guard let viewControllerIndex = VCArr.index(of: viewController) else {
        return nil
    }

    let nextIndex = viewControllerIndex+1
    guard nextIndex < VCArr.count
        else {
            return nil
    }

    guard VCArr.count > nextIndex else {
        return nil
    }




    return VCArr[nextIndex]
}




 public func presentationCount(for pageViewController: UIPageViewController) -> Int{
    return VCArr.count

}


 public func presentationIndex(for pageViewController: UIPageViewController) -> Int{
    guard let firstViewController = viewControllers?.first , let firstViewControllerIndex = VCArr.index(of: firstViewController) else {


        return 0
    }
        let firstIndex = firstViewControllerIndex - 1
        guard firstIndex >= VCArr.count  else {
            return VCArr.count



    }

    return firstViewControllerIndex
}
public func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    self.pageVC.currentPage = pageViewController.viewControllers!.first!.view.tag

 if(viewControllers!.first?.view.tag == 4 ) {

    if (VCArr.last!.isViewLoaded)

    {
        let modelName = UIDevice.current.modelName
        if modelName == "iPad Mini 3" {
            print("OK")


            let mainStoryboard: UIStoryboard = UIStoryboard(name: "ipadmini" , bundle: nil)
            let viewController = mainStoryboard.instantiateViewController(withIdentifier: "FivethVC")
            let appDelegate = UIApplication.shared.delegate as! AppDelegate
            appDelegate.window?.rootViewController = viewController


        }
        else {


        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main" , bundle: nil)
        let viewController = mainStoryboard.instantiateViewController(withIdentifier: "FivethVC")
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.window?.rootViewController = viewController
        print("Last Page Reached!!!")
        }
    }

    }
}





}



public extension UIDevice {
var modelName: String {
    var systemInfo = utsname()
    uname(&systemInfo)
      let machineMirror = Mirror(reflecting: systemInfo.machine)
      let identifier = machineMirror.children.reduce("") { identifier,element in
        guard let value = element.value as? Int8 , value != 0 else { return identifier }
        return identifier + String(UnicodeScalar(UInt8(value)))
    }
    switch identifier {
    case "iPod5,1":
        return "iPod Touch 5"
    case "iPod7,1":
        return "iPod Touch 6"
    case "iPhone3,1", "iPhone3,2", "iPhone3,3":
        return "iPhone 4"
    case "iPhone4,1":
        return "iPhone 4s"
    case "iPhone5,1", "iPhone5,2":
        return "iPhone 5"
    case "iPhone5,3", "iPhone5,4":
        return "iPhone 5c"
    case "iPhone6,1", "iPhone6,2":
        return "iPhone 5s"
    case "iPhone7,2":
        return "iPhone 6"
    case "iPhone7,1":
        return "iPhone 6 Plus"
    case "iPhone8,1":
        return "iPhone 6s"
    case "iPhone8,2":
        return "iPhone 6s Plus"
    case "iPhone9,1", "iPhone9,3":
        return "iPhone 7"
    case "iPhone9,2", "iPhone9,4":
        return "iPhone 7 Plus"
    case "iPhone8,4":
        return "iPhone SE"
    case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":
        return "iPad 2"
    case "iPad3,1", "iPad3,2", "iPad3,3":
        return "iPad 3"
    case "iPad3,4", "iPad3,5", "iPad3,6":
        return "iPad 4"
    case "iPad4,1", "iPad4,2", "iPad4,3":
        return "iPad Air"
    case "iPad5,3", "iPad5,4":
        return "iPad Air 2"
    case "iPad2,5", "iPad2,6", "iPad2,7":
        return "iPad Mini"
    case "iPad4,4", "iPad4,5", "iPad4,6":
        return "iPad Mini 2"
    case "iPad4,7", "iPad4,8", "iPad4,9":
        return "iPad Mini 3"
    case "iPad5,1", "iPad5,2":
        return "iPad Mini 4"
    case "iPad6,3", "iPad6,4", "iPad6,7", "iPad6,8":
        return "iPad Pro"
    case "AppleTV5,3":
        return "Apple TV"
    case "i386", "x86_64":
        return "Simulator"
    default:
        return identifier

    }
}}