2011-08-05 47 views
2

我有一個表格視圖,其中的單元格是子類。在子類中,我調用UIView的一個子類。 我已經實現了tableView:heightForRowAtIndexPath:,並希望在我的子類中檢索這個高度來設置我的子類UIView實例的高度。獲取UITableViewCell子類中單元格的高度

有沒有辦法做到這一點?

我已經嘗試使用self.bounds.size.heightself.contentView.frame.size.height但這些似乎都沒有給出正確的高度。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 

     textCellView = [[TextCellView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)]; 
     [[self contentView] addSubview:textCellView]; 
    } 
    return self; 
} 

回答

8

在創建時子視圖沒有被定位,所以你不能依賴於框架。相反,請嘗試將值傳遞到自定義表格單元格上的init方法。沒有說你必須使用initWithStyle:reuseIdentifier:方法。這裏有一個例子:

- (id) initWithHeight: (CGFloat) cellHeight { 
    if ((self = [super initWithStyle: UITableViewCellStyleDefault 
        reuseIdentifier: @"MyCustomTableViewCell"])) { 
    // perform all layout that needs to happen 
    // use cellHeight in all the layout calculations 
    } 
    return self; 
} 
+0

啊,當然!我認爲'initWithStyle:reuseIdentifier'方法是默認和必需的。你有沒有機會告訴我爲什麼我的高度如果每次滾動時都不在表格視圖中創建單元格,那麼爲什麼我的高度會搞亂?這意味着我不能使用'if(cell == nil){// Create cell}'。我認爲每次單元格滾動時都會造成資源過大。我認爲蘋果公司在他們的例子中使用了「if(cell == nil)」。 – simonbs

+0

你的細胞應該是不同的高度?如果是這樣,當你選擇你的單元格時,它不是零,你必須再次手動設置高度,並重新計算佈局。如果是這種情況,您可能需要使用高度設置器,而不是將其設置爲init。隨意發佈代碼。 –

+1

我不知道我的細胞的高度。我通過標籤的大小,間距等來計算它。我認爲最好就這個問題提出一個新問題,所以我提出了一個關於可變高度單元重用的問題。我通過使單元格標識符變量來解決問題,但我不確定是否需要這樣做。我已經在這篇文章中發佈了一些代碼:http://stackoverflow.com/questions/6962411/multiple-reuse-identifiers-in-a-uitableview在這裏我不使用高度設置器,但我設置高度在init(as在你的例子中),但我會重複使用相同高度的單元格。 – simonbs

相關問題