我正在尝试从UITableViewController
启动AppDelegate
作为RootController而不使用Storyboard。
这是我的TasksTableViewController:
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)
}
nib文件名为TasksTableViewController
。 TasksTableViewController
的view属性连接到nib上的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控件而不是黑屏。我做错了什么?
更新:
以下是使其正常运行的代码:
@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 :(得分: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,因为这是常见的做法。通常不推荐对UITableView进行子类化,也不将其用作ViewController。如果您在要使用的xib中布置了自定义tableview,则可以在视图中实例化一个在根视图控制器上执行load或init,将其添加为子视图,并将框架设置为覆盖整个屏幕。我强烈推荐这种方法。