2013-08-23 173 views
1

在我使用下面的代碼段中,細節文本標籤不顯示:detailtext標籤沒有顯示出來

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString* cellIdentifier = @"NEW"; 
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier]; 

    UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath ]; 
    if(cell==nil) 
    {  
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 

    } 
    NSDictionary* item = [saleItems objectAtIndex:[indexPath row]]; 
    cell.textLabel.text = [item valueForKey:@"name"]; 
    cell.detailTextLabel.text = [item valueForKey:@"store"]; 

    return cell; 




} 
然而

當我修改上述方法,以下面的詳細文本出現了:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString* cellIdentifier = @"NEW"; 
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier]; 


    UITableViewCell* cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
    NSDictionary* item = [saleItems objectAtIndex:[indexPath row]]; 
    cell.textLabel.text = [item valueForKey:@"name"]; 
    cell.detailTextLabel.text = [item valueForKey:@"store"]; 

    return cell; 


} 

第一種方法出了什麼問題? 什麼是使用dequeueReusableCellWithIdentifier的正確方法?

回答

2

根據此SO post,註冊UITableViewCell意味着所有單元格將以默認樣式實例化。副標題和右側和左側的細節單元不適用於registerClass:forCellReuseIdentifier:

2

因爲您創建了一個默認樣式。在你的問題的一些方法是可以從iOS版6.您確定要定位到iOS 6

你可以試試這個示例代碼(不僅適用於iOS 6):

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    // if you sure the cell is not nil (created in storyboard or everywhere) you can remove "if (cell == nil) {...}" 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
    } 

    NSDictionary* item = [saleItems objectAtIndex:[indexPath row]]; 
    cell.textLabel.text = [item valueForKey:@"name"]; 
    cell.detailTextLabel.text = [item valueForKey:@"store"]; 

    return cell; 

}

希望這對你有所幫助!

-1

在第二種方法中,您不是將細胞排隊,而是實際創建一個新細胞。這是不可取的。相反,使用1號的方法,但更換行:

UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath ]; 

這是因爲它包括indexPath方法將總是返回你的細胞,所以檢查;

if(!cell) 

將始終返回true,因此您將無法使用其他樣式創建單元格。但是使用沒有索引路徑的方法將返回nil,如果單元格之前未創建...您可以閱讀Apple提供的UITableViewCell文檔的更多內容:)