2013-03-11 78 views
1

我試着去一個UISwitch加起來也只有一個單元格在我的表視圖繼承人的代碼:添加UISwitch只有一個單元格中的TableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    FormCell *cell = (FormCell *) [tableView dequeueReusableCellWithIdentifier: @"FormCell"]; 
    if(cell == nil) cell = [[FormCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FormCell"]; 

    if(indexPath.row == 3) 
    { 
     UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100, 9, 50, 50)]; 
     [mySwitch addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged]; 
     [cell.contentView addSubview:mySwitch]; 

     [[UISwitch appearance] setOnTintColor:[UIColor colorWithRed:163.0/255.0 green:12.0/255.0 blue:17.0/255.0 alpha:1.0]]; 
    } 

    return cell; 
} 

其工作,問題是,當我滾動tableview中向上或向下,它重複的UISwitch,但最終還是在表視圖的開始...

任何幫助嗎?

+0

我們可以得到更多'tableView:heightForRowAtIndexPath'嗎? – Larme 2013-03-11 19:43:36

+0

@Larme爲了更好的理解而編輯。 – darkman 2013-03-11 20:01:38

回答

0

記住單元格被重用。你最好用自己的標識符創建一個自定義的UITableViewCell。在那裏做你自己的鼓勵。

+0

我比試圖「清理」通用可重用單元更好。向表中添加第二個UITableViewCell,給它自己的標識符,並且當調用get-cell-for-row時返回該單元格,如果行== 3。那樣,該單元格只用於第3行。需要請注意,如果要在代碼中添加開關而不是在故事板中多次添加開關對象,請務必小心。 – 2013-03-11 19:54:26

0

UITableView高度優化,其中一個主要優化是儘可能重用表格單元對象。這意味着您的表格行和UITableViewCell對象之間不存在永久性的一對一映射。

因此,單元對象的同一個實例可以重複用於多行。一旦單元格的行在屏幕外滾動,該行的單元格將進入「回收」堆,並可能重新用於其他屏幕上的行。

通過創建交換機對象並將其添加到細胞,每次排三,三生屏幕上你重新加入,到任何Cell對象表碰巧「出列」的第3行

如果您將要添加的東西到可重用的單元格中時,必須有相應的代碼將Cell重新用於其他表格行時將其重置爲默認值的相應代碼。

0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    FormCell *cell = (FormCell *) [tableView dequeueReusableCellWithIdentifier: @"FormCell"]; 

    if(cell == nil){  
     cell = [[FormCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"FormCell"]; 
    } 
else 
    { 
    for (UIView *subview in [cell subviews]) 
    { 
     [subview removeFromSuperview]; 
    } 
    } 

if(indexPath.row == 3) 
{ 
    UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectMake(100, 9, 50, 50)]; 
    [mySwitch addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged]; 
    [cell.contentView addSubview:mySwitch]; 

    [[UISwitch appearance] setOnTintColor:[UIColor colorWithRed:163.0/255.0 green:12.0/255.0 blue:17.0/255.0 alpha:1.0]]; 
} 

return cell; 
} 

這不會複製在桌子上滾動 另一種方法是設置reuseIdentifiernil的UISwitch。 希望這有助於。

相關問題