2015-08-15 67 views
0

我正在尋找一種使用Storyboard以編程方式設置我的初始視圖控制器的方法。我發現這個解決方案:Programmatically set the initial view controller using StoryboardsSwiftSpinner不再工作

這個作品只是喜歡我想它,但使用該主題中提供的斯威夫特後回答:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
var exampleViewController: ExampleViewController = mainStoryboard.instantiateViewControllerWithIdentifier("ExampleController") as! ExampleViewController 

self.window?.rootViewController = exampleViewController 

self.window?.makeKeyAndVisible() 

return true 
} 

當裝載了第一次用於工作框架圖將不再工作:SwiftLoader。 https://github.com/leoru/SwiftLoader

但是,當我第二次加載相同的視圖時,SwiftLoader插件沒有激活。

我加載SwiftLoader像這樣:

SwiftLoader.show(title: "Loading...", animated: true) 

我認爲它與代碼做上面創建的UIWindow,而不是任何腳本中使用到的感覺(UIView的?)做的,但我不想法如何解決這個問題?

+0

當您顯示指標視圖時,您能否就您的問題報告部分代碼? – LuckyStarr

回答

3

SwiftLoader使用應用程序的關鍵窗口呈現。見this source code

var currentWindow : UIWindow = UIApplication.sharedApplication().keyWindow! 

    // […snip…] 

    loader.coverView = UIView(frame: currentWindow.bounds) 
    loader.coverView?.backgroundColor = UIColor.clearColor() 

    if (loader.superview == nil) { 
     currentWindow.addSubview(loader.coverView!) 
     currentWindow.addSubview(loader) 
     loader.start() 
    } else { 
     loader.coverView?.removeFromSuperview() 
    } 

所以你的問題必須是另一個窗口是關鍵窗口當你第一次啓動SwiftLoader。

要檢查此問題,請檢查UIApplication.sharedApplication().keyWindow並將其與UIApplication.sharedApplication().windows數組進行比較,以查看您應用中當前所有窗口的內容。最前面的UIWindow將是這個數組的最後一個元素。

非關鍵窗口可能是iOS的鍵盤,警報視圖等

the SVProgressHUD library by implementing this code固定一個類似的問題:

NSEnumerator *frontToBackWindows = [UIApplication.sharedApplication.windows reverseObjectEnumerator]; 
    for (UIWindow *window in frontToBackWindows){ 
     BOOL windowOnMainScreen = window.screen == UIScreen.mainScreen; 
     BOOL windowIsVisible = !window.hidden && window.alpha > 0; 
     BOOL windowLevelNormal = window.windowLevel == UIWindowLevelNormal; 

     if (windowOnMainScreen && windowIsVisible && windowLevelNormal) { 
      [window addSubview:self.overlayView]; 
      break; 
     } 
    } 

您可能要更新SwiftLoader使用更智能的邏輯是這樣的(移植到Swift),或者允許你手動指定一個窗口。