2015-02-07 34 views
0

我有這樣的UITableViewController子類:如何爲分組樣式創建指定的初始化UITableViewController?

class MyTableViewController: UITableViewController { 
    let foo: String 

    init(foo: String, style: UITableViewStyle = .Grouped) { 
     self.foo = foo 
     super.init(style: style) 
    } 

    required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } 
} 

沒什麼特別的,不幸的是預期,因爲super.init(style: style)將調用MyTableViewController(nibName:bundle:)這是行不通的。但是這並沒有在我的課堂上實現,所以應用程序會崩潰,出現fatal error: use of unimplemented initializer 'init(nibName:bundle:)' for class錯誤。

很明顯,正確的方法是調用指定的初始化程序。不幸的是super.init(nibName: nil, bundle: nil)會創建一個普通樣式的tableView。

我可以將let foo: String轉換爲var foo: String!,並將我的指定初始值設定項變爲便捷初始值設定項。像這樣:

class MyTableViewController: UITableViewController { 
    var foo: String! 

    convenience init(foo: String, style: UITableViewStyle = .Grouped) { 
     self.init(style: style) 
     self.foo = foo 
    } 
} 

哪個會起作用,但是它打敗了let的目的。所以我不想這樣做。


我在做什麼錯?我需要做些什麼才能夠使用我自己的初始化程序?

回答

0

當然,最好的解決方案是調用指定的初始化程序。但要獲得分組樣式表視圖,您必須使用一個nib文件。

這個筆尖包含一個分組的UITableView。 nib文件的文件所有者是一個UITableViewController。它的視圖插座連接到UITableView。非常直截了當。

然後,我們可以使用下面的代碼作爲我們的init方法:

init(foo: String, style: UITableViewStyle = .Grouped) { 
    self.foo = foo 

    if style == .Grouped { 
     super.init(nibName: "GroupedTableViewController", bundle: nil) 
    } 
    else { 
     super.init(nibName: nil, bundle: nil) 
    } 
} 

這不是很優雅,但它能夠完成任務。

相關問題