Я работал над этим в течение последних 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, второй внизу никогда не работает, потому что он вызывается только на нижних уровнях стека.