2012-08-09 60 views
1

嗨,我是IOS開發新手,我創建了一個使用在nib中創建的自定義單元格的UITableView。下面是我的代碼從我的ViewController加載單元格,但如果我上下滾動應用程序崩潰3次,因爲我不認爲我正在重新使用單元格。我搜索了一下,但我發現的很多代碼/解決方案似乎已經過時了。我的代碼下面的任何幫助非常感謝!使用NIB重複使用自定義單元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"CustomCell"; 
    CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"]; 
    if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; 
     for (id currentObject in topLevelObjects){ 
      if ([currentObject isKindOfClass:[UITableViewCell class]]){ 
       cell = (CustomCell *) currentObject; 
       break; 
      } 
     } 
    } 
    cell.TITLE.text = [NSString stringWithFormat:@"\"%@\"", [TITLE objectAtIndex:indexPath.row]]; 
    cell.desc.text = [desc objectAtIndex:indexPath.row]; 
    cell.votes.text = [votes objectAtIndex:indexPath.row]; 
    return cell; 
} 

回答

3

改變行

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

CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; 

轉到IB您CustomCell的.xib文件,查找identifier領域並將其設置爲CustomCell

+0

太簡單了,謝謝! – GFlam 2012-08-09 21:17:13

+0

我使用與上面建議的代碼相同的代碼,但是如果我在nib文件中設置了單元格標識符,那麼標籤上的控件會隨着上下滾動而消失。但是,如果我跳過在nib中設置標識符,那麼Table View滾動速度非常慢,但數據正常。任何想法可能是什麼問題? – Anshul 2013-04-16 11:14:17

+0

首先,如果您跳過設置標識符,tableview將滾動速度較慢,因爲您不重用單元格,並且每個單元格和它的子視圖都會再次創建。我可以猜測你的問題是你沒有在cellForRowAtIndexPath方法中正確配置你的單元格。確保所有更新單元數據的代碼都在if(cell == nil)語句之外。因爲如果使用標識符,單元格將被重用,並且if(cell == nil)語句中的代碼不會被調用。 – Eyal 2013-04-19 09:47:01

0

您可以註冊tableView的筆尖,如:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier = @"CustomCell"; 
    CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     [tableView registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil] forCellReuseIdentifier:cellIdentifier]; 
     cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    } 

    //... 

    return cell; 
} 
相關問題