1. 程式人生 > >iOS 7 在一般的 ViewController 中使用static cell

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。