UITableViewCell и странное поведение в сгруппированном UITableView - PullRequest
1 голос
/ 26 апреля 2010

Я работаю над сгруппированным UITableView, с 4 разделами по одной строке на раздел, и у меня странное поведение с ячейками. Ячейки являются обычными UITableViewCells, но высота ячеек составляет около 60 - 80 пикселей. Теперь табличное представление отрисовывает ячейки правильно с закругленными углами, но когда я выбираю ячейки, они отображаются синим цветом и прямоугольник . Я не знаю, почему ячейки ведут себя так, потому что у меня есть другой сгруппированный UITableView с пользовательскими ячейками и высотой 88 пикселей, и эти ячейки работают так, как должны.

Если я изменю высоту на высоту по умолчанию в 44 пикселя, ячейки будут вести себя как следует. Кто-нибудь знает об этом поведении и в чем причина?

Как я уже упоминал, я не делаю никаких причудливых вещей, я использую UITableViewCells по умолчанию в статическом, сгруппированном UITableView с 4 разделами по 1 строке в каждом разделе.

evangelion2100

Редактировать: ОК, вот соответствующие части моего кода. Поскольку я использую только фиксированное количество ячеек для этого табличного представления, я храню ячейки в 2d NSMutableArray. Я настроил ячейки в методе - (void) viewDidLoad, и соответствующие методы-делегаты получают доступ к массиву с сохраненными ячейками.

Я не вижу ничего, что могло бы вызвать такое странное поведение клеток, если бы они были выделены.

Edit2: Извините, причина, по которой я храню ячейки в массиве, заключается не только в числе ячеек. Если представление изменяется и UITableView появляется снова, ячейки будут заменены пользовательскими ячейками. Это реальная причина для хранения клеток. Это что-то вроде «добавить новое письмо» - тип поведения, как в приложении контактов с iphone.

-(void)viewDidLoad {
    // set up the AccompanyingLecture cell
UITableViewCell *accompanyingLectureCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"AccompanyingLectureCell"];
accompanyingLectureCell.textLabel.textAlignment = UITextAlignmentCenter;
accompanyingLectureCell.detailTextLabel.textAlignment = UITextAlignmentCenter;
accompanyingLectureCell.textLabel.text = NSLocalizedString(@"New Accompanying Lecture", @"");
accompanyingLectureCell.detailTextLabel.text = NSLocalizedString(@"Lecturer, Time, Location, etc.", @"");
accompanyingLectureCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
accompanyingLectureCell.frame = CGRectMake(0, 0, 320, 82);

// initialize datasource for all four sections
datasource = [[NSMutableArray alloc] initWithObjects:[NSMutableArray arrayWithObject:[lecturerCell autorelease]], [NSMutableArray arrayWithObject:[lectureDetailsCell autorelease]], [NSMutableArray arrayWithObject:[timeAndLocationCell autorelease]], [NSMutableArray arrayWithObject:[accompanyingLectureCell autorelease]], nil];
* *} Тысяча двадцать-один
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

return [[datasource objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

}

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGRect currentFrame = [[[datasource objectAtIndex: indexPath.section] objectAtIndex:indexPath.row] frame];
return currentFrame.size.height;

}

1 Ответ

0 голосов
/ 26 апреля 2010

Что произойдет, если вы просто вернете 82 в методе heightForRowAtIndexPath и не установите рамку ячейки в viewDidLoad?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...