iOS 7 在一般的 ViewController 中使用static cell
毫無疑問,我們從來沒有像這樣喜歡過故事板。從 iOS 5 開始,蘋果在其新的IDE版本中提供了故事板編輯器,並在故事板編輯器中“升級”了其 Object Library,尤其是UITableView。新的 UITableView 除了可以用傳統的 DataSource 程式設計方式提供 cell 外,還有兩種可以不離開 ViewController設計介面對其進行UI設計的單元格:模板單元格和靜態單元格。
前者毋庸多說,一旦你使用過它,就不會再離不開它了。而對於後者,一直存在著一個巨大的缺陷——靜態單元格只能在SDK內建的 UITableViewController 中使用,如果在程式設計師自己的ViewController中,靜態單元格根本不會顯示,甚至於編譯器會提示錯誤資訊:“Illegal Configuration: Static table views are only valid when embedded in UITableViewControllerinstances”。
這確實是一件令人遺憾的事情,但是蘋果至今(Xcode 5)沒有在其提供的 IDE 中解決這個缺陷。
這個問題怎麼解決?我們確實需要在自己的 ViewController 中使用靜態單元格。
我們可以從 Xcode4.5 以後的 Container View 中得到啟發。藉助於Xcode4.5.1 之後提供的 ContainerView,我們可以將一個包含有靜態單元格的UITableViewController “嵌入”到自己的 ViewController中。
具體步驟如下:
1、在故事板中拖入一個常規的 TableViewController 。
2、在這個 TableViewController 中使用靜態單元格。
3、在故事版中拖入一個常規的 ViewController 。
4、在這個 ViewController 中拖入一個 Container View。
5、這個 Container View 會自動帶有一個 segue 指向另一個 ViewController。將 segue 和那個ViewController 都刪除。
6、右鍵(或ctrl+左鍵)從 Container View 拖一條線到 TableViewController,然後在彈出的選單中選擇 Embed。
這樣,當執行程式時,那個普通的ViewController 中會顯示 TableViewController 中內容,即在自己的 ViewController中使用了靜態單元格。
但是,Embed segue 只在 iOS 6 以後有效。為了和 iOS 5 相容,你也可以使用下列程式碼來“嵌入”UITableViewController到一個常規的 ViewController 中:
- (void)viewDidLoad
{
[superviewDidLoad];
self.tableVC=[self.storyboardinstantiateViewControllerWithIdentifier:@"DerivedTableViewController"];
[self.containerViewaddSubview:_tableVC.view];
}
這裡,self 是 ViewController,self.tableVC 是 UITableViewController,self.containerView是 self 的 subview。