iOS 5 - переход от одного TableViewController к другому TableViewController - PullRequest
4 голосов
/ 10 декабря 2011

Я пытаюсь выбрать кнопку (или строку) раскрытия подробностей из одного TableViewController и перейти к другому TableViewController, не передавая никаких данных из первого во второй TableViewController.Таким образом, первый TableViewController действует как таблица, которая будет перемещаться к различным TableViewController в зависимости от выбранной кнопки (или строки) раскрытия информации.

Пока мой код для этого выглядит следующим образом:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {


    NSUInteger rowNumber = [indexPath row];   
    NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber];

    self.categoryData = [self.commuterDict objectForKey:categoryCode];

    [self performSegueWithIdentifier:@"ShowPlaces" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([[segue identifier] isEqualToString:@"ShowPlaces"]) {

        PlacesViewController *placesViewController = [segue destinationViewController];

        // --> I believe I'm missing something here to access a specific row? <--



    }
}

Надеюсь, кто-нибудь может мне помочь!

Ответы [ 5 ]

2 голосов
/ 01 января 2012

Документация для UIViewController -prepareForSegue:sender: гласит:

Поскольку сегменты могут запускаться из нескольких источников, вы можете использовать информация в параметрах segue и sender для определения контекста для передачи и передачи соответствующей информации. Например, если переход произошел из табличного представления, параметр отправителя идентифицировать ячейку табличного представления, которую пользователь коснулся Вы могли бы использовать это информация для установки данных на контроллере представления назначения.

Учитывая это, я сначала посмотрю на параметр sender и ожидаю, что он будет указателем на ячейку таблицы. Если вы знаете, в какой таблице должна находиться ячейка, вы можете использовать -indexPathForCell: для получения пути индекса ячейки.

2 голосов
/ 16 декабря 2011

Вы получаете конкретную строку из indexPath в tableView: accessoryButtonTappedForRowWithIndexPath: function. В частности, строка, которая была нажата, была indexPath.row. (Если ваша таблица имеет несколько разделов, то вы также можете прочитать раздел из indexPath, но, похоже, вы просто используете простую таблицу.)

Вы можете сохранить текущую строку в переменной, а затем прочитать ее в prepareForSegue: sender, чтобы выбрать, куда идти.

0 голосов
/ 09 августа 2012

Отправитель, которого вы используете для подготовки к передаче, может быть любым, кем вы захотите. Если вы хотите узнать строку, отправьте строку или путь индекса:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {


    NSUInteger rowNumber = [indexPath row];   
    NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber];

    self.categoryData = [self.commuterDict objectForKey:categoryCode];

    [self performSegueWithIdentifier:@"ShowPlaces" sender:indexPath];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([[segue identifier] isEqualToString:@"ShowPlaces"]) {

        PlacesViewController *placesViewController = [segue destinationViewController];

        // Row information is supplied as the sender
        NSIndexPath *indexPath = sender;


    }
}

Если вы хотите использовать фактическую строку, то сделайте это отправителем

[self performSegueWithIdentifier:@"ShowPlaces" sender:[tableView cellForRowAtIndexPath:indexPath]];
0 голосов
/ 06 января 2012

Если ваш объект-отправитель является ячеек таблицы, должен работать следующий фрагмент кода:

NSIndexPath *indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender];

В противном случае попробуйте

NSIndexPath *indexPath = nil;
if ([sender isMemberOfClass:[UITableViewCell class]]) 
{
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender]; 
}
else if ([[sender superview] isMemberOfClass:[UITableViewCell class]])
{
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[sender superview]];
}
else if ([[[sender superview] superview] isMemberOfClass:[UITableViewCell class]])
{
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
}
0 голосов
/ 01 января 2012

вы можете перетащить segue из контроллера вида в вид, который вы хотите отобразить, нажав кнопку раскрытия подробностей.Вы можете запустить переход изнутри вашего кода следующим образом

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"UpdateData" sender:self];
}

Приветствия из Австрии Martin

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