2012-05-05 63 views
2

我一直在尋找很多,但沒有發現任何有用的相關多個自定義行,我需要爲我的應用程序創建一個設置tableView,其中我需要從xib文件加載行,如:多個自定義行UITableView?

ROW 1 = >> XIB 1.
ROW 2 = >> XIB 2.
ROW 3 = >> XIB 3.
ROW 4 = >> XIB 4.

我本代碼:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell=nil; 
    //We use CellType1 xib for certain rows 
    if(indexPath.row==0){ 
     static NSString *CellIdentifier = @"ACell"; 
     cell =(ACell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if(cell==nil){ 
      NSArray *nib= [[NSBundle mainBundle] loadNibNamed:@"ACell" owner:self options:nil]; 
      cell = (ACell *)[nib objectAtIndex:0]; 
     } 
     //Custom cell with whatever 
     //[cell.customLabelA setText:@"myText"] 
    } 
    //We use CellType2 xib for other rows 
    else{ 
     static NSString *CellIdentifier = @"BCell"; 
     cell =(BCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if(cell==nil){ 
      NSArray *nib= [[NSBundle mainBundle] loadNibNamed:@"BCell" owner:self options:nil]; 
      cell = (BCell *)[nib objectAtIndex:0]; 
     } 
     //Custom cell with whatever 
     //[cell.customLabelB setText:@"myText"] 
    } 

    return cell; 
} 

回答

7

首先創建了一些自定義的UITableViewCell類(h和.M),你有廈門國際銀行文件作爲許多:
所以你可以有CellType1和CellType2例如。
CellType1.h看起來像

#import <UIKit/UIKit.h> 
@interface CellType1 : UITableViewCell 

@property(nonatomic,strong) IBOutlet UILabel *customLabel; 

@end 

然後創建了廈門國際銀行文件,你可以使用默認視圖類型,但後來,只是刪除自動創建的視圖,替換由一個UITableViewCell,變類CellType1。對CellType2執行相同操作。

然後在你的tableViewController,寫cellForRow這樣的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
UITableViewCell *cell=nil; 
//We use CellType1 xib for certain rows 
if(indexPath.row==<whatever you want>){ 
    static NSString *CellIdentifier = @"CellType1"; 
    cell =(CellType1*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if(cell==nil){ 
     NSArray *nib= [[NSBundle mainBundle] loadNibNamed:@"CellType1" owner:self options:nil]; 
     cell = (CellType1 *)[nib objectAtIndex:0]; 
     } 
     //Custom cell with whatever 
     [cell.customLabel setText:@"myText"] 
} 
//We use CellType2 xib for other rows 
else{ 
    static NSString *CellIdentifier = @"CellType2"; 
    cell =(CellType2*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if(cell==nil){ 
     NSArray *nib= [[NSBundle mainBundle] loadNibNamed:@"CellType2" owner:self options:nil]; 
     cell = (CellType2 *)[nib objectAtIndex:0]; 
     } 
     //Custom cell with whatever 
     [cell.customLabel setText:@"myText"] 
} 

return cell; 
} 
+0

你是什麼意思與「<任何你想要>」 – Mateus

+0

你說你要使用多個廈門國際銀行,我猜測爲n1排,xib2爲n2排等xib1 ...所以該行的if/else語句檢查指數,並根據您想達到你選擇正確的廈門國際銀行在正確的行索引 –

+0

我的廈門國際銀行的主視圖,我應該再改變UITableViewCells或只是調整的看法是什麼? – Mateus

3

如果您還不熟悉從xib加載自定義單元格,請查看documentation here。將其擴展到多個自定義xibs,可以創建在一個單獨的XIB每個表格單元,給它一個唯一小區標識符,設置表視圖控制器作爲文件的所有者,並且連接每個小區定義的自定義單元格出口(在文檔,他們使用tvCell作爲此出口)。然後在您的-tableView:cellForRowAtIndexPath:方法中,您可以通過檢查您提供單元格的哪一行來加載正確的xib(或使正確的可重用單元出列)。例如:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier1 = @"MyIdentifier1"; 
    static NSString *MyIdentifier2 = @"MyIdentifier2"; 
    static NSString *MyIdentifier3 = @"MyIdentifier3"; 
    static NSString *MyIdentifier4 = @"MyIdentifier4"; 

    NSUInteger row = indexPath.row 

    UITableViewCell *cell = nil; 

    if (row == 0) { 
     cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifer1]; 
     if (nil == cell) { 
      [[NSBundle mainBundle] loadNibNamed:@"MyTableCell1" owner:self options:nil]; 
      cell = self.tvCell; 
      self.tvCell = nil; 
     } 
    } 
    else if (row == 1) { 
     cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifer2]; 
     if (nil == cell) { 
      [[NSBundle mainBundle] loadNibNamed:@"MyTableCell2" owner:self options:nil]; 
      cell = self.tvCell; 
      self.tvCell = nil; 
     } 
    } 
    else if (row == 2) { 
     cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifer3]; 
     if (nil == cell) { 
      [[NSBundle mainBundle] loadNibNamed:@"MyTableCell3" owner:self options:nil]; 
      cell = self.tvCell; 
      self.tvCell = nil; 
     } 
    } 
    else if (row == 4) { 
     cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifer4]; 
     if (nil == cell) { 
      [[NSBundle mainBundle] loadNibNamed:@"MyTableCell4" owner:self options:nil]; 
      cell = self.tvCell; 
      self.tvCell = nil; 
     } 
    } 
    // etc. 

    // Do any other custom set up for your cell 

    return cell; 

} 
+0

此方法不適合我的工作。我得到'UITableView數據源必須從tableView:cellForRowAtIndexPath返回一個單元格:'想法?我有我的ViewController鏈接到每個單元格,併爲每個單元格製作並連接到單元格的自定義IBOutlet。 –