Доступ к DetailViewController из нижних уровней rootviewcontroller в стеке навигации - PullRequest
0 голосов
/ 27 марта 2011

Я работал над этим в течение последних 11 часов, и я думаю, что выяснил, что происходит, но я не могу понять, как это исправить. В основном я использую шаблон SplitView для iPad. У меня есть RootViewController слева и DetailViewController справа.

Основным отличием от шаблона по умолчанию является то, что я использую табличное представление RootViewControler для представления структуры каталогов. Это все работает нормально, пока я не хочу установить метку на DetailViewController с одного из более глубоких уровней в rootviewcontroller. Я могу установить метку на самом верхнем контроллере rootview, но все, что ниже в стеке, не работает.

Я полагаю, что это происходит потому, что каждый раз, когда вы перемещаетесь на другой уровень в каталоге, он помещает другой экземпляр RootViewController в стек навигации, и эти новые экземпляры не подключаются к DetailViewController. Что я не могу понять, так это как заставить новые экземпляры взаимодействовать с DetailViewController.

Вот код:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    detailViewController.detailItem = [NSString stringWithFormat:@"Row %d",indexPath.row];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

        NSString *type = [[dataSource objectAtIndex:indexPath.row] objectAtIndex:2];
        if ([type isEqualToString:@"tFolder"]) {
            [tableView deselectRowAtIndexPath:indexPath animated:YES];
            NSString *path = [[dataSource objectAtIndex:indexPath.row] objectAtIndex:0];
            UITableViewController *targetViewController = [[RootViewController alloc] initWithPath:path];
            [self.navigationController pushViewController:targetViewController animated:YES];
            [targetViewController release];
        } else if ([type isEqualToString:@"tFile"]) {
            NSLog(@"Setting title");
            detailViewController.detailItem = [NSString stringWithFormat:@"Row %d",indexPath.row];
        }


}

В основном, что должно произойти, если пользователь нажмет на ячейку, которая является папкой, он поместит новый экземпляр RootViewController в стек навигации и отобразит содержимое этого каталога в нем. Если пользователь щелкает файл, он должен установить для detailItem имя этого файла (в настоящее время это просто код заполнителя), который DetailViewController затем возьмет и изменит метку в своем представлении на имя файла.

Первый элемент detailViewController.detailItem вверху работает, но только если вы находитесь в самом верхнем RootViewController, второй внизу никогда не работает, потому что он вызывается только на нижних уровнях стека.

1 Ответ

0 голосов
/ 27 марта 2011

Получил работу, используя

RootViewController* topController = [self.navigationController.viewControllers objectAtIndex:0];
topController.detailViewController.detailItem = [NSString stringWithFormat:@"Row %d",indexPath.row];

Нашел решение в этом вопросе: Проблемы с доступом к rootviewController из navcontroller iphone

Я пытался использовать navigationController.topViewController, но он все равно вернул бы nil. Однако использование objectAtIndex:0 работает.

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