您必須檢查cellForRowAtIndexPath
中的當前方向並正確配置您的單元格。您可以使用IB創建2個不同的單元格。
另外,您必須在循環事件的回調之一(shouldAutorotateToInterfaceOrientation
或didRotateFromInterfaceOrientation
)中調用[myTableView reloadData]
。每次撥打[myTableView reloadData]
(所有單元格)時都會調用cellForRowAtIndexPath
。 確保您使用不同的標識符來重用單元格。
編輯:這是我會怎麼編寫這樣的:
添加2個IBOutlets您.h文件中:
IBOutlet MyCustomCell1 * customCell1;
IBOutlet MyCustomCell2 * customCell2;
在Interface Builder中,設置每個小區的標識屬性,或許真的如cellIdentifier1
和cellIdentifier2
。確保IB中的文件所有者是你的數據源(cellForRowAtIndexPath
的實現地點)。
cellForRowAtIndexPath
應該是這樣的:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft
|| [UIDevice currentDevice].orientation == UIDeviceOrientationLandscaperight)
{
//Landscape, lets use MyCustomCell2.
NSString * cellIdentifier2 = @"cellIdentifier2";
MyCustomCell2 * cell = (MyCustomCell2 *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
//We have to initialize the cell, we're going to use IB
[[NSBundle mainBundle] loadNibNamed:@"CustomCell2NibName" owner:self options:nil];
//After this, customCell2 we defined in .h is initialized from IB
cell = customCell2;
}
//setup the cell, set text and everything.
return cell;
}
else
{
//portrait case, the same as before but using CustomCell1
NSString * cellIdentifier1 = @"cellIdentifier1";
MyCustomCell1 * cell = (MyCustomCell1 *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
//We have to initialize the cell, we're going to use IB
[[NSBundle mainBundle] loadNibNamed:@"CustomCell1NibName" owner:self options:nil];
//After this, customCell1 we defined in .h is initialized from IB
cell = customCell1;
}
//setup the cell, set text and everything.
return cell;
}
}
我很不熟悉標識符:)他們是什麼?我做了一些簡單的列表而不知道它們...... – Centurion
爲了加速單元格渲染過程,可以使用[yourTable dequeueReusableCellWithIdentifier]創建單元格。該選擇器返回一個UITableviewCell,如果它爲零,是第一次創建單元格並且你已經初始化它。查看[本教程](http://www.iphonedeveloperdiary.com/2010/03/correct-use-of-dequeuereusablecellwithidentifier-in-a-table-view-on-the-iphone/)或訪問iOS參考指南更多信息;) – ender
謝謝,我明白了:)現在,你可以更詳細地瞭解如何設置不同的標識符?我想我應該有兩個separete調用dequeueReusableCellWithIdentifier從cellForRowAtIndexPath?我的意思是,我應該檢查當前的方向,如果(mode = portrait)然後出隊通過potrait-mode-identifier的單元格,否則使用橫向模式標識符出列?它看起來像我必須重寫cellForRowAtIndexPath方法totaly。 – Centurion