2012-02-27 4 views
0

У меня есть UITableView с UITableViewCell s, которые являются swipable. Когда ячейка пробита, я хочу, чтобы вид был видимым (открытым) под этой ячейкой. Вот код, который у меня есть:insertSubview: belowSubview: in UITableViews

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

_cellBack = [[UIView alloc] initWithFrame:CGRectMake(0, cell.frame.origin.y, cell.frame.size.width, cell.frame.size.height)]; 
_cellBack.backgroundColor = [UIColor whiteColor]; 
[self.tableView insertSubview:_cellBack belowSubview:cell]; 

for (int i = 0; i < [self.tableView subviews].count; i++) { 
    UIView *v = [[self.tableView subviews] objectAtIndex:i]; 

    if ([v isEqual:_cellBack]) { 
     NSLog(@"cellBack %d", i); 
    } 
    if ([v isEqual:cell]) { 
     NSLog(@"cell %d", i); 
    } 
} 

В цикле for, я проверяю, если индексы при просмотрах являются, как я ожидал, и на самом деле они являются; _cellBack имеет индекс, который меньше одного индекса cell.

Когда я заменить insertSubview:belowSubview: вызов insertSubview:aboveSubview:, он отлично работает (хотя и с белым UIView показывая вверх над прокатывается клетки), так что это не вопрос, не выделяя _cellBack должным образом. Я также пробовал insertSubview:atIndex:, и это тоже не сработало.

Что может быть причиной этого?

Спасибо!

+0

Вы пытаетесь A) вставить новый вид НИЖЕ (например, внизу) указанную ячейку, так что ваш новый вид и ячейка таблицы наслаиваются одна на вершине другой; или вы пытаетесь B) вставить новую строку для своей таблицы, чтобы, если в таблице было три ячейки в начале после запуска вашего кода, у нее было бы четыре? – jonkroll

+0

Я пытаюсь добавить его под ячейку. Это не новая строка, которую я добавляю. – donkim

+0

Так может быть, что вы успешно добавляете свой subview, но поскольку он имеет тот же размер и в том же месте, что и ячейка таблицы, вы просто не видите его, потому что ячейка таблицы находится поверх него и полностью скрывает его? – jonkroll

ответ

0

Так получается, что, если добавить его к другой точке зрения, что код работает, как ожидалось.

Вот где я добавил его:

_cellBack = [[UIView alloc] initWithFrame:CGRectMake(0, cell.contentView.frame.origin.y, cell.frame.size.width, cell.frame.size.height)]; 
    _cellBack.backgroundColor = [UIColor whiteColor]; 

    [cell insertSubview:_cellBack belowSubview:cell.contentView]; 

Я до сих пор не знаю, почему код в вопросе не работает. SideSwipeTableView от this github account имеет код, аналогичный тому, что у меня раньше, и он отлично работает.

1

UITableView У нас уже есть возможность поместить вещи за ячейки. Это ячейка backgroundView. Почему бы вам не попробовать, что вместо того, чтобы таким образом вы могли бы сделать следующее:

cell.selectedBackgroundView = _cellBack; 
2

Для примера работы SideSwipeTableView на ios7 & предыдущей, просто измените строку

[cell.superview insertSubview:self.sideSwipeView belowSubview:cell]; 

Что-нибудь еще толкает вид сзади на верхней части клетки, и вы не получите никакого эффекта анимации, анимации происходит за вашей фоновой ячейкой! Чтобы проверить это изменение, смещение ячейки меньше, чем на весь экран, чтобы проверить, что ваша ячейка все еще находится сверху, а фон - внизу. От:

cell.frame = CGRectMake(direction == UISwipeGestureRecognizerDirectionRight ? cellFrame.size.width : -cellFrame.size.width, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height); 

в

cell.frame = CGRectMake(direction == UISwipeGestureRecognizerDirectionRight ? cellFrame.size.width/2 : -cellFrame.size.width/2, cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height);