Должно быть простое решение, но после 4 часов просмотра StackExchange я сдаюсь и пытаюсь получить ответ здесь:
Ситуация: iOS 5, Xcode 4.2.1, используяРаскадровки
Настройка:
- Root Navigation Controller = UITabBarController с 5 элементами
- Каждая вкладка связана с UITableViewController (через сегменты), который работает отлично, автоматически
- У меня есть классы для каждого контроллера представления и контроллера навигации (UITabBarController)
- Я нажимаю на вкладку, скажем «Программа», и она показывает мне список элементов (в связанном UITableViewController),скажем, один из этих элементов "Sessions"
- Я нажимаю на "Sessions", didSelectRowAtIndexPath вызывается просто отлично.
- Я хочу выполнить переход сейчас (который я подключил из этого UITableViewController,не ячейку, новому UITableViewController и присвоенному ему идентификатору.
Я звоню: [self performSegueWithIdentifier:@"programToSessions" sender:self];
prepareForSegue получает called, но ничего потом.Нет ошибок, нет предупреждений.Новый UITableViewController не отображается.
- Примечание. Однако он обнаруживается, если я переключаю переход на «модальный» - но он отбрасывает / скрывает исходную панель вкладок внизу.тогда (не предназначено ...)
До сих пор моя проблема, казалось, имела вероятное решение.Контроллер навигации.Я подумал, что если я установлю ссылку на контроллер навигации в AppDelegate, инициализирую / установлю его после загрузки фактического корневого контроллера навигации (в viewDidLoad), то есть в основном использовал что-то вроде: app.navController = self.navigationController
в viewDidLoad - это может сработать!Правильно?Итак, я изменил действие segue на: [app.navController performSegueWithIdentifier:@"programToSessions" sender:self];
Пока ничего не меняется, оно не отображается.
Есть идеи?
Решено:
Здесь было несколько проблем.Основная проблема заключалась в том, что я пропустил установку «контроллера навигации» между UITabBarController и UITableViewController.Это можно сделать, добавив новый «Navigation Controller» в раскадровку, затем перетащите его из UITabBarController (rootViewController) в этот новый контроллер и установите RELATIONSHIP.Затем перетащите ОТНОШЕНИЕ в UITableViewController.Таким образом, как указано в правильном ответе, он должен выглядеть следующим образом: UITabBarController -> (отношение) -> UINavigationController -> (отношение) -> UITableViewController
Для загрузки новых UITableViewController поверхПоследний UITableViewController, простой переход и вызов его через код будет достаточно.Конечное дерево будет выглядеть так:
UITabBarController -> (отношение) -> UINavigationController -> (отношение) -> UITableViewController -> (переход) -> UITableViewController
Дайте seue идентификатор.В коде используйте это:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"loadMyDetailView" sender:self];
}