2014-02-22 98 views
0

我有一個UITableViewController,它顯示了自定義類型的NSArray的屬性。縱向拍攝時,我想顯示三個標籤(表現爲列),但在橫向拍攝時,我可以更多地放在UITableViewCell上,並且我想顯示5個標籤。根據方向更改UITableViewCell的內容

目前,我通過把UILabelsUITableViewCell,並給他們貼標籤,這樣我可以得到的子視圖,並設置在cellForRowAtIndexPath方法文本鋪設在故事板編輯器的原型細胞本人的肖像細胞。我開始沿着這條路輕鬆使用我的標籤自動佈局。

我發現了很多建議,當方向改變時重新調整/移動單元格上的項目,但不知道如何改變可見子視圖的數量。我正在考慮嘗試使用兩個不同的單元格標識符(其中一個具有更多橫向模式標籤),並根據[UIDevice currentDevice].orientation選擇我想要的。我想還需要強制輪換重新加載單元格。

有沒有更容易/更好的方法來做到這一點?

回答

2

你是在正確的軌道上。只需開發具有唯一標識符的2個不同原型,並根據當前方向在cellForRowAtIndexPath中提供它們。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { 

     LatestNewsCell *cell = (LatestNewsCell *)[tableView dequeueReusableCellWithIdentifier:@"portraitCell" forIndexPath:indexPath]; 

     // configure cell 

     return cell; 

    } else { 

     LatestNewsCell *cell = (LatestNewsCell *)[tableView dequeueReusableCellWithIdentifier:@"landscapeCell" forIndexPath:indexPath]; 

     // configure cell 

     return cell; 
    } 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [self.tableView reloadData]; 
} 

在有多個標籤的電池的情況下,你只需要創建額外的IBOutlets這些和重用對於在兩個方向上使用的標籤現有的。

編輯:請重新加載方向更改表。

1

您可以交換整個數據源和委託,甚至是整個視圖的方向更改。取決於你需要配置多少,這可能會使你的代碼更加清潔。蘋果在這裏有一個很好的指導: https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html#//apple_ref/doc/uid/TP40007457-CH7-SW14

+0

謝謝我沒有考慮換掉整個View Controller。這將使佈局更清潔,但我最終不得不維護兩個類而不是一個,並且避免在兩個VC之間重複代碼將很困難。 – SlimCheney

+1

更糟糕的是,如果您在if-else語句中重複了代碼!你應該真的計算你可以保存多少重複的代碼。如果太多了,也許你應該考慮進一步將VC的某些邏輯與其他類分離(也許你的視圖控制器正在執行數據模型任務?) – TAKeanice

0

另一個選項是UICollectionViewController。 UIkit中的表格是爲單個列創建的,而collectionViews則用於更復雜的佈局,比如想要實現的佈局。