2014-01-24 47 views
0

我有一個帶有自定義單元格的tableview,在我的單元格中,我有一個標籤和一個圖像,標籤中的文本很長,所以我只是顯示前2行,然後使用換行符顯示3dots「...」,然後當用戶點擊單元格時,它將展開以顯示標籤的全文 當錄製時更改單元格的高度,我這樣做是這樣的:如何在更改高度時在單元格中顯示labelview的全文

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{  
if ([tableView indexPathsForSelectedRows].count) { 

    if ([[tableView indexPathsForSelectedRows] indexOfObject:indexPath] != NSNotFound) { 


     MsgInfo *info = [_msgInfos objectAtIndex:indexPath.row]; 
     NSString *displayString = info.msg; 




     CGRect boundingRect = 
     [displayString boundingRectWithSize:CGSizeMake(self.tableView.frame.size.width - 2 * 10, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes: 
      @{ NSFontAttributeName : [UIFont fontWithName:@"B Yekan" size:18.0f]} context:nil]; 

     CGFloat rowHeight = ceilf(boundingRect.size.height); 

     NSLog(@"Height = %f for '%@'", rowHeight, displayString); 

     return 54 + rowHeight + 2 * 10; // Expanded height 


    } 

    return 92; // Normal height 
} 

return 92; // Normal height 
} 

所以,當我點擊一個細胞,它擴展了基於我的標籤文字字體和大小,

但現在我想說明標籤的全文,我知道我必須設置label.numberofline = 0 didSelectRowAtIndexPath,但它不起作用。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

static NSString *CellIdentifier = @"MsgCell"; 

UITableViewCell *cell = 
[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
            reuseIdentifier:CellIdentifier]; 
} 


UILabel *nameLabel = (UILabel *)[cell viewWithTag:100]; 

nameLabel.numberOfLines =0; 
[nameLabel sizeToFit]; 
[nameLabel setLineBreakMode:NSLineBreakByWordWrapping]; 

    [self.tableView beginUpdates]; 
[self.tableView endUpdates]; 
} 

有幫助嗎?

+0

你不應該[[tableView indexPathsForSelectedRows] indexOfObject:indexPath],因爲indexPath是一個新創建的對象,可能不在selectedIndexPath數組中。 – santhu

回答

1

didSelectRowAtIndexPath您正在創建一個新的單元格並更改其設置(不編輯現有單元格,也不會編輯任何將用於顯示的單元格)。你應該做的是觸發重新加載選定的單元格,以便重新計算新的高度並重新加載單元格。在tableView:cellForRowAtIndexPath:中,您應該具有類似的邏輯來檢查該行是否被選中,然後設置標籤上的行數。

tableView:cellForRowAtIndexPath:中執行此操作也會阻止您在取消選擇時出現問題,因爲您必須始終爲每個單元重新使用時設置行數。

+0

我想你的解決方案,但邏輯不工作在tableView:cellForRowAtIndexPath:你能解釋一點嗎? –

+0

看看你試過的東西並知道它不起作用會很有用。目的是設置行數。如果索引路徑是選定行,則設置爲零,如果未選擇,則設置爲2。 – Wain

相關問題