使用标签和重用细胞

时间:2013-07-11 12:03:57

标签: ios objective-c cocoa-touch

我有一个名为totalWins的数组,里面有一个名为winningNumbers的数组。在其中有70个数字我需要在UITableView单元格中显示。 我已经将UITaableViewCell子类化并创建了一些UITextField个出口。 做旧的时尚方式:

NSArray *winningNumbers = [[_currentSearchResults objectAtIndex:indexPath.row]objectForKey:@"winningNumbers"];
cell.txtFld1.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:0]];
cell.txtFld2.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:1]];
....
....

效果很好。我试图节省一些编码时间并做到这一点:(当然在设​​置了textfields标签之后)

for(int i=0;i<70;i++)
    {
        UITextField *tempField = (UITextField *) [self.view viewWithTag: 777+i];

        tempField.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:i]];
    }

问题在于,由于单元格的重用,在滚动表格视图时数字会混乱。在没有写cell.txtFld1.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:0]]; 70次的情况下完成上述任务的首选方法是什么?

4 个答案:

答案 0 :(得分:1)

使用 [cell.contentView viewWithTag:777 + i] 而不是 self.view 。你的解决方案还可以。

答案 1 :(得分:1)

我还没有尝试过,但可能会有效:

for (id subview in [cell.contentView subviews]) {
    if([subview isKindOfClass:[UITextField class]]) {
        UITextField *textfield = (UITextField*)subview;
        textfield.text = [NSString stringWithFormat:@"%@",[winningNumbers objectAtIndex:(textfield.tag-777)]];
    }
}

希望这有帮助。

答案 2 :(得分:0)

子类UITableViewCell并创建一个UITextFields数组。

@interface YourCell: UITableViewCell
@property (nonatomic, readonly) NSArray *textfields;
@end

在ivar备份textfields属性中存储对文本字段的引用。

然后你可以做

NSArray *textfields = cell.textfields;
for (int i = 0; i < textfields.count; i++)
{
    UITextfield *field = [textfields objectAtIndex:i];
    // set textfield's text
}

答案 3 :(得分:0)

只需删除所有创建的文本字段,然后每次都创建它们。

 for(UIView *view in cell.contentView.subviews)
{
    [view removeFromSuperView];
}