2015-03-31 64 views
-1

如果我有以下文件:一個UIView子類,兩種不同的.xib文件

MyTableViewCell.h 
MyTableViewCell.m 
MyTableViewCell.xib 
MyTableViewCell~ipad.xib 

在IB,如果我指定一個小區作爲類類型「MyTableViewCell」,我怎麼能得到它從負載MyTableView〜ipad.xib,在iPad設備上時?我嘗試這樣做:

@implementation MyTableViewCell 

- (id)initWithCoder:(NSCoder *)aDecoder { 
    if (self = [super initWithCoder:aDecoder]) { 
     if (IPAD) { 
      self = [UIView viewWithNib:@"MyTableViewCell~ipad"]; 
     } 
     else { 
      //iphone 
     } 
    } 
    return self; 
} 

這顯然是錯誤的,並導致一個無限循環,但給的是什麼,我試圖做一個想法。如果我在iPad上,我希望MyTableViewCell〜ipad.xib能夠加載任何我指定爲MyTableViewCell的單元格。我想如果我給它命名〜ipad它應該自動工作,但這似乎只適用於視圖控制器。

回答

0

你必須在你的TableView數據源函數中進行單元格加載。你可以做這樣的事情:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *cellIdentifier = @"MyTableViewCell"; 
    MyTableViewCell* cell = (MyTableViewCell*) ([tableView dequeueReusableCellWithIdentifier:cellIdentifier]); 
    if(!cell){ 
     if(UI_USER_INTERFACE_IDIOM == UIUserInterfaceIdiomPhone){ 
      //iPhone 
      [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil]; 
     } 
     else{ 
      //iPad 
      [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell~ipad" owner:self options:nil]; 
     } 
    cell = _aCell; 
    _aCell = nil; 
    } 
    //Continue with initialization of your UI elements 
} 

這樣,你的細胞的特定的初始化是由細胞的所有者類處理 - 在一般情況下,你的tableViewController。它還可以防止發佈內容等無限循環情況。

對於這個工作,你必須把它添加到MyTableViewController.h

@property (retain, nonatomic) IBOutlet MyTableViewCell* aCell; 

此外,你必須在你的MyTableViewCell XIBs設置「文件的所有者」類的tableViewController類(比如MyTableViewController)。然後將MyTableViewCell XIB中的UITableViewCell元素鏈接到文件所有者中的aCell屬性。

記得讓你的TableViewController響應UITableViewDelegate和UITableViewDatasource。此外,你將不得不爲tableViewDelegate/Datasource實現以下功能:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 

希望這會有所幫助。

+0

感謝您的建議。如果我在表格視圖中使用靜態單元呢? – soleil 2015-03-31 17:10:00

+0

我仍然確定你的MyTableViewCell類中有一些IBOutlet屬性(這就是爲什麼你有一個MyTableViewCell開始)需要設置。如果不是,這應該仍然有效。所有這些代碼都告訴iPad - 對於我需要在表格中創建的每個單元格,使用iPhones的「MyTableViewCell」和iPad的「MyTableViewCell〜iPad」。 – Tcharni 2015-04-01 02:01:45

相關問題