2016-04-29 10 views
0

UITableViewControllerをロードするAppDelegateからUITableViewControllerをRootControllerとして起動しようとしています。 nibファイルがTasksTableViewControllerと呼ばれStoryboardsを使用せずにプログラムで

class TasksTableViewController: UITableViewController { 

    override func viewDidLoad() { 

     super.viewDidLoad() 

    } 

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

は、ここに私のTasksTableViewControllerです。 TasksTableViewControllerのviewプロパティは、ペン先のコントロールUITableViewに接続されています。

AppDelegateは次のようになります。

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

     window = UIWindow(frame: UIScreen.mainScreen().bounds) 

     let controller = TasksTableViewController(nibName: "TasksTableViewController", bundle: nil) 
     window?.rootViewController = controller 

     window?.makeKeyAndVisible() 
     return true 
    } 

私が見るすべては黒い画面です。 UITableViewコントロールへのデータバインディングはありませんが、空のuiTableviewコントロールが表示され、黒い画面が表示されないようにしたいと考えていました。私は間違って何をしていますか?

UPDATE:ここ

はそれが働いてしまったコードです:

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

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

     self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 


     let controller = TasksTableViewController(nibName: "TasksTableViewController", bundle: nil) 

     if let window = self.window { 
      window.backgroundColor = UIColor.blueColor() 
      window.rootViewController = controller 
      window.makeKeyAndVisible() 
     } 

     return true 
    } 
+0

'nibName'に' nil'を渡すだけで十分です。あなたの 'Info.plist'をチェックします - ウィンドウとルートコントローラをストーリーボードからロードするようにするいくつかのプロパティがあり、ストーリーボードテンプレートからプロジェクトを作成した場合はそれらをアンセットする必要があります。 – Sulthan

+0

また、コントローラの背景色と背景色を設定することをお勧めします。それは問題が何であるかを教えてくれるはずです。 – Sulthan

+0

データソースとtableview.countを定義する必要があると思います。 –

答えて

1

は、この種のものを試してみてください:

それがあったことを確認するために、ブレークポイントに置き
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    let controller = TasksTableViewController(nibName: "TasksTableViewController", bundle: nil) 

    if let window = self.window{ 
     window.rootViewController = controller 
    } 
} 

それをウィンドウに追加する前に正しく作成されます。また、起動時に新しいウィンドウをインスタンス化する理由はありません。そうしないでください。この時点で、viewDidAppearにブレークポイントを置くことによってVCが実際に表示されていることを再度確認します。 TasksTableViewControllerをUIViewControllerのサブクラスにすることを検討してください。これは、これが一般的な方法であるため、内部にtableviewがあります。 Subclassing UITableViewは、通常はお勧めしませんし、ViewControllerとして使用しています。あなたが使用したいxibにカスタムテーブルビューをレイアウトした場合は、ルートビューコントローラでビューの読み込みや初期化を行い、サブビューとして追加し、フレーム全体を覆うようにフレームを設定することができます。私はこのアプローチを強く勧めます。

+0

ありがとう!あなたのアプローチを試みましたが、まだ黒い画面が表示されます。 viewDidLoadイベントとviewDidAppearイベントは、コントローラでも起動されません。 –

+0

元のコードを更新して、どのように動作しているかを示しました。 –

関連する問題