2

我确信这个问题不是唯一的,但我还没有找到其他资源来解决它。实际上,这些已经引起了更多的混乱。如果可以的话,请照亮。

问题的症结在于我想在带有自定义单元格的 7 节 30ish 行表的一个单元格中滑动(-50)一个 UILabel。滚动后,其他几行正在移动此标签,并且随着滚动的继续,它们继续移动得越来越远。

您会注意到负 50 x 坐标在 2 个位置进行测试。第一个,在单元格 == nil 中,永远不会被调用。为什么??我认为那是解决这个问题的地方。

即使单元格为零,也不确定如何调用 initWithStyle (不适用于自定义)或 initWithCoder (在情节提要中创建)。??

    NSArray *a = [[userDetailData objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]];

    NSString *key = [[[a objectAtIndex:0] allKeys] objectAtIndex:0];
    NSString *value = [[a objectAtIndex:0] valueForKey:key];

    static NSString *CellIdentifier = @"MasterCell";

    UsersTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // If cell does not exist, create it, otherwise customize existing cell for this row
    if (cell == nil) {
        // Create cell
        cell = [[UsersTableViewCell alloc] initWithCoder:<#(NSCoder *)#>reuseIdentifier:CellIdentifier];

        // Configure cell:
        NSLog(@"Key: %@   %d, %d", key, [indexPath section], [indexPath row]);
        // Prepare the date field to move left for checkmark or ex-mark

        if ([key isEqualToString:@"Date"]) {
            CGRect frame = cell.comboLabel.frame;
            frame.origin.x -= 50;
            cell.comboLabel.frame = frame;
            NSLog(@"In Date...  minus 50");
        }
    }

    // Customize cell:
    CGRect frame = cell.comboLabel.frame;
    if ([key isEqualToString:@"Date"]) {
        frame.origin.x -= 50;
        cell.comboLabel.frame = frame;
        NSLog(@"   %d, %d\n   cell: %@\n", [indexPath section], [indexPath row], cell);
    }
    else {
        frame.origin.x += 0;
        cell.comboLabel.frame = frame;
    }

    // Reset color
    cell.comboLabel.textColor = [UIColor blackColor];

    // Set the Item
    cell.nameLabel.text = [NSString stringWithFormat: @" %@",key];
    // Give the cell an accessory indicator
    ..... continue on with logic.
4

1 回答 1

1

cell 不是 nil ,因为您只是在 if 语句之前将其分配给了一个可重用的单元格。

我会考虑制作一个带有“日期单元”之类标识符的辅助原型单元,如果您正在创建的单元具有关键“日期”,则制作第二组可重复使用的单元

这里:

NSArray *a = [[userDetailData objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]];

NSString *key = [[[a objectAtIndex:0] allKeys] objectAtIndex:0];
NSString *value = [[a objectAtIndex:0] valueForKey:key];

static NSString *CellIdentifier = @"MasterCell";
static NSString *DateCellIdentifier = @"Date Cell";

UsersTableViewCell *cell;

//Customize Cell

if ([key isEqualToString:@"Date"]) {

    cell = [tableView dequeueReusableCellWithIdentifier:DateCellIdentifier];
    CGRect frame = cell.comboLabel.frame;

    frame.origin.x -= 50;
    cell.comboLabel.frame = frame;
    NSLog(@"   %d, %d\n   cell: %@\n", [indexPath section], [indexPath row], cell);
}
else {
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    frame.origin.x += 0;
    cell.comboLabel.frame = frame;
}

// Reset color
cell.comboLabel.textColor = [UIColor blackColor];

// Set the Item
cell.nameLabel.text = [NSString stringWithFormat: @" %@",key];
// Give the cell an accessory indicator
..... continue on with logic.

事实上,如果您只是在情节提要上自定义原型单元格,您甚至可能不需要对单元格进行大部分自定义。

于 2012-04-12T20:34:15.370 回答