2012-11-29 96 views
0

我增加了自定義按鈕進入我cell.contentView,我注意到,每當一個細胞滾動到屏幕的可見部分和背面,按鈕被重新添加 - 它的半透明部分變得更加堅固。什麼是正確的方式來處理它,以便它不會在滾動瀏覽tableView時在頂部堆疊更多的對象?請注意,每個單元的自定義內容都不相同,因此我無法將其放入if (cell == nil) {...}塊中。UITableViewCell的自定義內容時,細胞變得可見

我的代碼是:

UISegmentedControl *btn = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:btn_title]]; 
// set various other properties of btn 
... 
[cell.contentView addSubview:btn]; 

回答

3

每次細胞出列,你必須增加新的之前刪除舊的子視圖,否則你會得到疊加效應。您可以在以下兩個位置之一執行此操作:

a)在tableView:cellForRowAtIndexPath:中,在dequeueReusableCellWithIdentifier:呼叫之後和添加新視圖之前刪除舊視圖。 b)如果您使用的子類爲UITableViewCell,則可以覆蓋prepareForReuse以刪除不需要的視圖。每次細胞出院重新使用時都會調用prepareForReuse,因此這是從上次配置單元格後襬脫舊視圖的好地方。

+1

我去與方法:運行'dequeueReusableCellWithIdentifier'和'如果(細胞==零){之後。 ..}'我'用於(在cell.contentView.subviews的UIView * v){ 如果([v isKindOfClass:[UISegmentedControl類]]){ [v removeFromSuperview]; } }'也可以根據需要輕鬆添加其他類型的視圖。 – SaltyNuts

0

我會針對您發佈的代碼發佈樣本修復。它可以擴展到照顧更多的意見。

的步驟是:

  1. 創建您CustomCell類中的方法,是以整個設置的照顧(例如:setupWithItems:
  2. 一旦你有了cellForRowAtIndexPath:細胞(出列,或在創建後它),你應該調用setupWithItems:與單元格應該顯示的新項目列表。
  3. 在你setupWithItems:實施,確保你從其父視圖中刪除UISegmentedControl。你可以很容易地做到這一點,分段控制存儲爲您的自定義單元格的屬性。
  4. 在你setupWithItems:實現,創建一個新的UISegmentedControl,並把它添加到CustomCell的視圖層次結構。

示例代碼:

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath 
{ 
    CustomCell* cell = [tableView dequeueReusableCellWithIdentifier:kSomeIdentifier]; 

    if (!cell) 
    { 
     // Create a new cell 
    } 

    NSArray* currentCellItems = [self cellItemsForRow:indexPath.row]; 

    [cell setupWithItems:currentCellItems]; 

    return cell; 
} 

而在你CustomCell子類:

- (void)setupWithItems:(NSArray*)items 
{ 
    if (self.segmentedControl) 
    { 
     [self.segmentedControl removeFromSuperView]; 
     self.segmentedControl = nil; 
    } 

    // More setup... 

    UISegmentedControl *btn = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:btn_title]]; 
    // set various other properties of btn 

    [cell.contentView addSubview:btn]; 
} 
+0

這可能會做到這一點,但我不是繼承表格單元格,所以這對我的目的有點太過分了。 – SaltyNuts

相關問題