2017-02-21 3 views
-1

ich eine andere Geschichte Bord starten mag, die iPad verwendet, aber wenn ich den Code ausführen werde ich Fatal ErrorSprung zu einem anderen Storyboard

hier erhalten ist mein Codes

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 

    } 
    }} 

** ich verwenden mag Storyboards für Geräte und der App-Start Feind Beispiel iPad mini Storyboard, wenn ich das Programm auf dem iPad mini laufen **

Antwort

0

ok Hier ist die Antwort

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 

    } 
}} 
Verwandte Themen