簡體   English   中英

iOS UITableView單元格被復制

[英]iOS UITableView cells getting duplicated

我有一個tableviewcontroller,在單元格中創建了動態控件。 如果是下拉類型,則將用戶帶到其他tableviewcontroller來選擇值。 選擇之后,我會彈出並重新加載數據,但是當我這樣做時,它將覆蓋彼此頂部的單元。 我知道這是因為我正在重復使用這些單元格,但是似乎無法弄清楚如何防止這種情況的發生。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];

    [self.tableView reloadData];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    EWHInboundCustomAttribute *ca = [visibleCustomAttributes objectAtIndex:indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
        cell.tag=indexPath.row;


    if (ca.CustomControlType == 1) {
        cell.detailTextLabel.hidden=true;
        cell.textLabel.hidden=true;

        UITextField *caTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 185, 30)];

            caTextField.adjustsFontSizeToFitWidth = YES;
            caTextField.textColor = [UIColor blackColor];

            caTextField.placeholder = ca.LabelCaption;
            if (ca.ReadOnly) {
                [caTextField setEnabled: NO];
            } else {
                [caTextField setEnabled: YES];
            }
            caTextField.text=nil;
            caTextField.text=ca.Value;
            caTextField.tag=indexPath.row;

            caTextField.delegate=self;

            [cell.contentView addSubview:caTextField];



    } else if (ca.CustomControlType == 4) {

        cell.detailTextLabel.text=ca.Value;
        cell.textLabel.text=ca.LabelCaption;
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    } else {

            cell.detailTextLabel.hidden=true;
            cell.textLabel.hidden=true;
            UITextField *caTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 185, 30)];
            caTextField.adjustsFontSizeToFitWidth = YES;
            caTextField.textColor = [UIColor grayColor];

            caTextField.placeholder = ca.LabelCaption;
            [caTextField setEnabled: NO];
            caTextField.text = ca.Value;

            caTextField.tag=indexPath.row;
            caTextField.delegate=self;
            [cell.contentView addSubview:caTextField];
    }



    return cell;
}

在此處輸入圖片說明

我建議[UIView viewWithTag:tag]至少使用[UIView viewWithTag:tag]來捕獲相同的UITextField對象,而不是每次都創建UITextfield。

我建議您創建自定義UITableViewCell子類,並將所有與子視圖相關的邏輯放在那里。
接下來,為了在重用之前重置/清除單元格-您應該覆蓋prepeareForReuse函數。

迅速:

override func prepareForReuse() {
    super.prepareForReuse()

    //set cell to initial state here
}

首先,我建議您使用自定義單元格。如果不是,並且您的單元格不是很多,則可以嘗試使用唯一的單元格標識符以避免單元格重用:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // unique reuseID
    NSString *cellReuseID = [NSString stringWithFormat:@"%ld_%ld", indexPath.section, indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellReuseID];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellReuseID];
        // do something
    }
    return cell;
}

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM