2015-07-02 10 views
6

Mam aplikację, która ma 4 storyboardy, każdy dla innego urządzenia (iphone4, 5, 6, 6+). Próbowałem używać automatycznych ograniczeń, ale ponieważ moja aplikacja jest skomplikowana, nie byłem w stanie tego rozgryźć. Słyszałem, że jeśli masz wiele scenorysów, powinien istnieć sposób określania, który scenorys będzie używany w delegacie aplikacji. Jak mam przygotować odpowiedni storyboard dla właściwego urządzenia w delegacie aplikacji? Obecnie mam cztery storyboardy, pod nazwą:Wiele scenorysków w Swift

iphone4s.storyboard
iphone5.storyboard
iphone6.storyboard
iphone6plus.storyboard

Dziękuję.

+0

dlaczego używasz 4 storyboardów, w pojedynczej storyboardowej obsłudze wszystkie urządzenia z bro, plz optymalizują pracę. –

Odpowiedz

1

Implementacja funkcji, która pobiera scenorys po określeniu nazwy.

func getStoryBoard(name : String)-> UIStoryboard 
{ 
    var storyBoard = UIStoryboard(name: name, bundle: nil); 
    return storyBoard; 
} 

Zmień aplikacja metoda delegat jak:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 
    var storyBoard = getStoryBoard("Main") // Change the storyboard name based on the device, you may need to write a condition here for that 
    var initialViewController: UIViewController = storyBoard.instantiateInitialViewController() as! UIViewController 
    self.window?.rootViewController = initialViewController 
    self.window?.makeKeyAndVisible() 
    // Override point for customization after application launch. 
    return true 
} 
+0

Mimo że ta odpowiedź została pochowana na samym dole wątku, była to jedyna, która działała. Przepraszam, że zajęło to tyle czasu, aby przegłosować. –

3

Według mnie te dni wykorzystujemy autoLayout który wie jak układ swój pogląd na w zależności od rozmiaru ekranu i ograniczeń

Ponieważ poprosiłeś można zastąpić storyboard z AppDelegate w metodzie applicationdidFinishLaunchingWithOptions

let storyBoard : UIStoryboard = UIStoryboard(name: "iphone4s", bundle: nil) 
    //you can check your device and override the storyboard name 
    let initialViewController: UIViewController = storyBoard.instantiateInitialViewController()! 
    self.window?.rootViewController? = initialViewController 
1

W celu uruchomienia różnych storyboardy dla różnych urządzeń, trzeba zastąpić rootViewController Object.

 
     var myDeviceStoryboard : UIStoryboard = UIStoryboard(name: "DeviceStoryboard", bundle: NSBundle.mainBundle())
var firstVC : MyDeviceFirstViewController = myDeviceStoryboard.instantiateViewControllerWithIdentifier("MyDeviceFirstViewController") as! MyDeviceFirstViewController
self.window?.rootViewController = MyDeviceFirstViewController //This should be a navigation controller

Musisz również zastąpić kilka ustawień w ustawieniach projektu i scenorysie. Odsyłam załączone obrazy. enter image description here