У меня есть TableView с двумя UILabel для каждой строки. Когда коромысло пользователя на камере, я хотел бы, чтобы уменьшить рамку первой наклейки на моей камере, для того, чтобы решить эту проблему:editStyleForRowAtIndexPath называется три раза одновременно. Зачем?
Это мой код:
- (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 из Пизы (простите за мой английский!)
Привет, Валерио, спасибо вам за помощь. У меня такая же проблема. Метод 'editStyleForRowAtIndexPath' вызывается три раза одновременно, как вы можете видеть на моем предыдущем сообщении консоли. Итак, я уменьшаю рамки три раза подряд. Я этого не ожидаю. Зачем? Я очень ценю вашу помощь. – AlexM
Первое, что я вижу: вам нужно использовать идентификатор ячейки, когда вы назначаете ячейку, иначе бессмысленно получать повторно использованную ячейку из стека с методом «dequeue». Затем используйте переменную экземпляра для вашего dateformatter и установите его один раз, потому что для этого требуется память и вычисления, не подходящие в каждой ячейке. Для повторяющейся проблемы, сколько секций и строк у вас есть в вашей таблице? – Valerio