2012-06-13 3 views
3

У меня есть TableView с двумя UILabel для каждой строки. Когда коромысло пользователя на камере, я хотел бы, чтобы уменьшить рамку первой наклейки на моей камере, для того, чтобы решить эту проблему:editStyleForRowAtIndexPath называется три раза одновременно. Зачем?

bug_image

Это мой код:

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:NO] autorelease]; 
    } 

    custom_cell = [[[UILabel alloc] initWithFrame:CGRectMake(10, 0, 200, 45)] autorelease]; 


    custom_cell.textColor = [UIColor blackColor]; 

    custom_cell.backgroundColor = [UIColor clearColor]; 

    [custom_cell setText:[[self.Notes objectAtIndex:indexPath.row ]objectForKey:@"Text"]]; 

    [cell.contentView addSubview:custom_cell]; 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat: @"dd MMM yy"]; 

    [dateFormat setLocale:[NSLocale currentLocale]]; 

    NSDate *dateTmp = [[self.Notes objectAtIndex:indexPath.row] objectForKey:@"CDate"]; 

    cell.detailTextLabel.text = [dateFormat stringFromDate: dateTmp]; 

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

    [dateFormat release]; 

    return cell; 


} 

Тогда для того, чтобы уменьшить рамку первой наклейки на моей камере, я написал этот код:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSLog(@"row=%d", indexPath.row); 

    custom_cell.frame = CGRectMake(10, 0, 150, 45); 

    return UITableViewCellEditingStyleDelete; 
} 

в результате частично. Последний ярлык моего tableView всегда уменьшен, а не правильный.

Также консоль печатает три раза сообщение NSLog. Зачем?

2012-06-13 22:07:34.809 myVoyager[1935:16103] row=0 
2012-06-13 22:07:34.810 myVoyager[1935:16103] row=0 
2012-06-13 22:07:34.813 myVoyager[1935:16103] row=0 

Спасибо, Alessandro из Пизы (простите за мой английский!)

ответ

1

Я Валерио из Пизы! Вы должны сделать, как это в вашем методе editingStyleForRowAtIndexPath:

UITableViewCell *myCell = [self.tableView cellForRowAtIndexPath:indexPath]; 

, а затем установить рамку на ячейку.

+0

Привет, Валерио, спасибо вам за помощь. У меня такая же проблема. Метод 'editStyleForRowAtIndexPath' вызывается три раза одновременно, как вы можете видеть на моем предыдущем сообщении консоли. Итак, я уменьшаю рамки три раза подряд. Я этого не ожидаю. Зачем? Я очень ценю вашу помощь. – AlexM

+0

Первое, что я вижу: вам нужно использовать идентификатор ячейки, когда вы назначаете ячейку, иначе бессмысленно получать повторно использованную ячейку из стека с методом «dequeue». Затем используйте переменную экземпляра для вашего dateformatter и установите его один раз, потому что для этого требуется память и вычисления, не подходящие в каждой ячейке. Для повторяющейся проблемы, сколько секций и строк у вас есть в вашей таблице? – Valerio

Смежные вопросы