0

カスタムがUITableViewCellあり、ラベルなどのプロパティをデータソースに割り当てています。しかし、内部cellForRowAtIndexPath:で動的にコントロールを作成してからセルに追加しています。動的コンテンツを使用しdequeReusableCellWithIdentifier:ているため、めちゃくちゃになります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MyCell";
    MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    cell.stepperView.tag = [indexPath row];
    [cell.stepperView addTarget:self action:@selector(valueChanged:) forControlEvents:UIControlEventValueChanged];

    [[cell.calendarView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
    //THIS LINE ADDS A DYNAMIC CONTENT TO THE CELL
    [self addDatePicker:cell];  

    return cell;
}


-(void) addDatePicker:(AutomaticAnnualIncreasesCell *)cell
{
    DatePicker *datePicker = [[DatePicker alloc] initWithFrame:CGRectMake(0, 0, cell.calendarView.frame.size.width, cell.calendarView.frame.size.height)];

    datePicker.tag = 100;

    if([cell.calendarView viewWithTag:datePicker.tag] != nil)
    {
        [cell.calendarView addSubview:datePicker];
    }
}
4

1 に答える 1

0

それを実装した方法では、 に追加されたコンテンツの多くのコピーが作成されaddDatePicker:ます。

動的コンテンツ値ごとにカスタム セルにプロパティを追加し、そのsetSomeDynamicProperty:メソッドで既存のサブビューを削除して新しいサブビューを追加します (または単に既存のサブビューを調整します)。これにより、コンテンツの複数のコピーを取得できなくなります。特定の行で必要ない場合は、必ずプロパティをnilin に設定してください。tableView:cellForRowAtIndexPath:

于 2013-04-26T19:15:37.407 に答える