2013-02-07 119 views
14

我有一個關於3種不同類型原型單元格的表格視圖的簡單問題。前兩次只發生一次,而第三次發生四次。現在我感到困惑的是如何在我的cellforRowatindexpath中指定哪個單元格原型用於哪一行。所以,我想要的東西就像第0行,使用原型1,第1行,使用原型2,第3,4,5和第6行使用原型3.什麼是最好的方法來做到這一點?我是否給每個原型標識符,然後使用dequeueReusableCellWithIdentifier:CellIdentifier? 你能提供一些示例代碼嗎?TableView與多個原型單元格

編輯:

仍然無法正常工作。這是我目前的代碼。 (我只有在一種情況下的switch敘述,因爲我只是想測試一下,看看是否是第一行中產生與否的細胞,但目前表視圖爲空)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    switch(indexPath.row) 
{   
case 0: {static NSString *CellIdentifier = @"ACell"; 
        UITableViewCell *cell = [tableView 
              dequeueReusableCellWithIdentifier:@"ACell"]; 
    if(cell==nil) { 
    cell=[[UITableViewCell alloc] 
      initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:@"ACell"]; 

         } 
    return cell; 
    break; 
    } 
    } 
} 

Acell是我標識符我創建的細胞原型。我

+0

我不undertand你的問題。 –

+2

「我是否給每個原型標識符,然後使用dequeueReusableCellWithIdentifier:CellIdentifier?」是的你是。你幾乎已經回答了你自己的問題。 – rdelmar

+0

但我該如何選擇哪一個原型適用於哪一行? –

回答

16

如果您使用三個原型,然後使用三個標識符。因爲只有一個標識符會導致問題。你會得到錯誤的結果。所以這樣的代碼。

if(indexPath.row==0){ 
// Create first cell 
} 

if(indexPath.row==1){ 
// Create second cell 
} 

else{ 
// Create all others 
} 

您也可以在這裏使用開關盒以獲得最佳性能。

+0

在創建單元格期間,您可以按照相同的方法,然後使用單個標識符。但在這裏,您將在deque期間使用三個標識符。 –

3
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 

    if (cell.tag == 0) 
    { 
    return array1.count; 
    } 
    else(cell.tag == 1) 
    { 
    return array2.count; 
    }  
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *cellIdentifier; 

NSString *membershipType = [membershipTypeArray objectAtIndex:indexPath.row]; 

if ([membershipType isEqualToString:@"silver"]||[membershipType isEqualToString:@"gold"]) 
{ 
    cellIdentifier = @"cell"; 
} 
else if ([membershipType isEqualToString:@"platinum"]) 
{ 
    cellIdentifier = @"premiumCustomCell"; 
    cell.customCellImageView.image = [cellImageArray objectAtIndex:indexPath.row]; 
} 

cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

if (!cell) { 
    cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
} 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 
cell.headingLabel.text = [titleArray objectAtIndex:indexPath.row]; 
} 
+0

如何處理沒有。節中的行。如果您有2個原型單元格並且沒有要根據陣列數顯示的行? –

+0

您只需標記您的自定義原型單元格,並檢查每個單元格的數組數以返回'array.count' –

+0

@surajkthomas請參閱上面的我的編輯 –

1

在這裏,我寫了這樣的代碼:

#pragma mark == Tableview Datasource 

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 2; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
NSInteger nRows = 0; 
switch (section) { 
    case 0: 
     nRows = shipData.count; 
     break; 
    case 1: 
     nRows = dataArray1.count; 
     break; 
    default: 
     break; 
} 
return nRows; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
NSString *cellIdentifier = @"cellIdentifier1"; 
NSString *cellIdentifier1 = @"cellIdentifier2"; 
SingleShippingDetailsCell *cell; 
switch (indexPath.section) { 
    case 0: 
     cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     //Load data in this prototype cell 
     break; 
    case 1: 
     cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier1]; 
     //Load data in this prototype cell 
     break; 
    default: 
     break; 
} 
return cell; 
} 
相關問題