2017-04-17 5 views
2

非常に基本的なシングルビューアプリケーションでは、メインのストーリーボードファイルを削除し、その参照を削除しました。そのため、私はプログラムでウィンドウrootViewControllerを設定しています。ただし、シミュレータで単一のビュー(ラベルを含む)が正しく表示されている間は、デバイス上で実行すると黒い画面が表示されます。ここでは、アプリケーションの唯一のコードです。iOS - 'rootViewController'を設定すると、デバイスに黒い画面しか表示されない

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     window = UIWindow(frame: UIScreen.main.bounds) 
     window?.rootViewController = DummyViewController() 
     window?.makeKeyAndVisible() 
     return true 
    } 

info.plistファイルから[メインストーリーボード]のエントリと[一般設定]の[メインインターフェイス]エントリを削除しました。

私はSwift 3を使用し、iOS 8デバイスをターゲットにしています。私はXCode 8.3.1を使用しています。

コンソールには出力がありませんが、例外はありません。 viewDidLoad関数はブレークポイントでもトリガーされているため、コードパスが正しく実行されているようです。

アイデア?

ここでは、要望に応じてDummyViewControllerの裸のボーンコードがあります。メインインターフェイスここ enter image description here

への参照を示していない

class DummyViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

一般的な設定は、このケースを回避するDummyViewController enter image description here

**ソリューションにリンクされている.xib用の画像は、手動をすることですDummyViewControllerのために読み込む.xibを指定してください。**

+0

ます。http:// stackoverflowの。com/questions/30592521/opening-view-controller-from-app-delegate-using-swiftこのリンクに従ってください –

+0

「DummyViewController」のコードを追加してください – Carter

+1

画像とコードを更新していただきありがとうございます! – Carter

答えて

1

を変更。あなたは(あなたは以下を参照してください、別の方法でビューコントローラをロードする必要があり、その場合には)XIBを使用している場合を除き、のViewControllerのビューがレンダリングする方法を記述したものは何もありません。

これをテストするには、ViewControllerのviewDidLoad()メソッドにself.view.backgroundColor = UIColor.redという行を追加してから、デバイス上で再度実行してください。背景色が赤色に変わったら、やり直してください!次のステップは、プログラムでUILabelを追加することです。またXIB

let vc = MyViewController(nibName: "xibname", bundle: nil)

から


ロードのUIViewController、あなたはMyViewController内のカスタムのinitを追加することにより、ロードをマスクすることができます。

class MyViewController: UIViewController { 
    required init() { 
     super.init(nibName: "xibname", bundle: nil) 
    } 
} 

は(のためzonily-jameいただきありがとうございますクラスにそれを隠すことの追加)

+0

興味深いです。私はこのコードを試して、 "戻り値false"のヒットを返します... – mbradber

+0

@mbradber一般設定のメインインターフェイスへの参照を削除しましたか? – Carter

+0

@mbradberあなたのViewControllerが何も表示しないように見えるので、黒い画面が表示されます。私の更新された答えを見てください。背景が赤く変わりますか? – Carter

1

あなたのウィンドウのルートを設定して、色を設定してください

let viewController:DummyViewController = DummyViewController() 
self.window?.backgroundColor = UIColor.white 
self.window?.rootViewController = viewController 

とのViewControllerは何も表示に設定されていないように見えますあなたのコントローラ

override func viewDidLoad() 
    { 
    self.view.backgroundColor = UIColor.white 
    } 
0
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     let loginView : BaseClassVC = mainStoryboardIpad.instantiateViewControllerWithIdentifier("BaseClassVC") as BaseClassVC 
      let navigationController = UINavigationController(rootViewController: loginView) 

     self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
     self.window?.rootViewController = navigationController 
     self.window?.makeKeyAndVisible() 

     return true 
    } 
+0

これは、メインバンドルがプロジェクトから削除されたため、例外が発生します。私はそれを使用しないので、私はこのファイルを保持する必要はありません。 – mbradber

関連する問題