У меня есть таблица, у меня есть делегат cellForRowAtIndexPath к ней, и у меня есть экземпляр UITableViewCell, создаваемого в том методе, который я возвращаю. Где-нибудь в cellForRowAtIndexPath я также добавляю UIButton к cell.contentView той ячейки. Все это хорошо работает, пока я не выбираю ту ячейку с кнопкой в нем. Изменения ячеек окрашивают к синему (который в порядке), uibutton изменяет свой цвет на синий также. Теперь, если я нажимаю на это UIButton в выбранной ячейке, он просто исчезает! Ничего себе, это странно, как я фиксирую его? Я хочу, чтобы UIButton в выбранной ячейке остался, когда я нажимаю его.
Править: включенный моя cellForRowAtIndexPath реализация
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *sectionsTableIdentifier = @" sectionsTableIdentifier ";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: sectionsTableIdentifier];
for (UIView *view in cell.contentView.subviews)
[view removeFromSuperview];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero
reuseIdentifier: sectionsTableIdentifier] autorelease];
}
CGRect newIconRect = CGRectMake(276, 40, 29, 29);
UIButton *newIcon = [[UIButton alloc] initWithFrame:newIconRect];
[newIcon setImage:[UIImage imageNamed:@"mynewicon.png"] forState:UIControlStateNormal];
[cell.contentView addSubview:newIcon];
[newIcon release];
return cell;
}
Я заметил похожую проблему в OS 4.0 beta, где у меня была UIButton в UITableViewCell с setImage:forState:UIControlStateNormal. Кнопка исчезала, когда я возвращался к виду таблицы после выбора строки и нажимал на другой вид таблицы. Чтобы решить эту проблему, я установил для изображения параметр setImage:forState:UIControlStateHighlighted. Я не уверен, что это решит вашу конкретную проблему, но мне это помогло. Я думаю, что установка button.highlighted=NO в didSelectRowAtIndexPath: также могла бы сработать, но я не пробовал.
Похоже, что кнопка каким-то образом наследует выбранное состояние как свое выделенное состояние. Кто-нибудь нашел решение этой проблемы?
РЕШЕНИЕ: Я не совсем доволен этим хаком, но он работает для моих целей. В принципе, я хочу, чтобы кнопка появлялась только тогда, когда ячейка выделена. Подкласс UITableViewCell и добавьте эти переопределения (editButton - это экземпляр кнопки, который был добавлен в contentView ячейки в init).
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
editButton.hidden = YES;
[super setSelected: selected
animated: animated];
editButton.highlighted = NO;
if (selected)
[editButton performSelector: @selector(setHidden:)
withObject: nil
afterDelay: 0.2];
}
- (void)setSelected:(BOOL)selected {
editButton.hidden = YES;
[super setSelected: selected];
editButton.highlighted = NO;
if (selected)
[editButton performSelector: @selector(setHidden:)
withObject: nil
afterDelay: 0.2];
}