Как я могу переключиться на другой вид (пропуская два значения prepareForSegue) из uitableviewcell, нажав кнопку в центре ячейки

У меня есть tableView, и я хотел бы переключиться на другое представление, нажав кнопку в центре ячейки. Я использую динамические ячейки.

Итак, я хочу переключиться на представление (в навигационном контроллере) нажатием кнопки в ячейке, как мне это сделать в prepareForSegue? Я могу получить индекс ячейки, а затем выполнить этот шаг, щелкнув раскрытие, но когда я нажимаю кнопку, расположенную в центре ячейки, indexpath не существует. Вот код:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIViewController *destination = segue.destinationViewController;
    if ([destination respondsToSelector:@selector(setDelegate:)]) {
        [destination setValue:self forKey:@"delegate"];
    }
    if ([destination respondsToSelector:@selector(setSelection:)]) {
        NSIndexPath *indexPath = [self.tableFeed indexPathForCell:sender];
        NSString *idUser = [self.arrIDUser objectAtIndex:indexPath.row];
        NSLog(@"%@",idUser);
        NSString *pattern = [self.arrPattern objectAtIndex:indexPath.row];
        NSMutableDictionary *selection = [[NSMutableDictionary alloc] initWithObjectsAndKeys:idUser,@"idUser", pattern, @"pattern", nil];
        [destination setValue:selection forKey:@"selection"];
    }
}

person Joker    schedule 01.08.2013    source источник
comment
Что вызывает переход? кнопка в ячейке или индикатор раскрытия   -  person Prazad    schedule 01.08.2013
comment
проверьте мой ответ для решения   -  person Prazad    schedule 02.08.2013


Ответы (2)


Сначала вам нужно захватить ячейку, затем ее супервизор, т.е. UITableViewCellContentView, затем таблицу, в которой есть эта ячейка. Вот код.

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    NSLog(@"prepare for segue");   
    //sender is UIRoundRectButton
    UITableViewCell *cell = (UITableViewCell*) [[sender superview] superview];
    UITableView *table = (UITableView*)[[[sender superview] superview] superview];

    NSIndexPath *indexPath = [table indexPathForCell:cell];

    NSLog(@"%i %i",indexPath.section,indexPath.row);  

}

Это даст вам индексный путь для ячейки, в которой была нажата кнопка.

person Prazad    schedule 02.08.2013

Вы можете получить indexPath, перейдя в суперпредставление кнопки, чтобы получить представление содержимого, а затем в суперпредставление представления содержимого, чтобы получить ячейку. Но это как-то некрасиво.

Лучший подход можно найти в рецепты iOS, где они преобразуют источник кнопки в табличное представление через convertPoint:toView:, а затем вызовите indexPathForRowAtPoint: чтобы получить indexPath.

person dasdom    schedule 01.08.2013