2010-02-02 3 views
2

Im работает с сейсмическим примером xml iphone. В этом примере есть просто делегат приложения, у которого есть rootViewController типа UITableViewController.Проблемы с доступом к rootviewController navcontroller iphone

Я хотел немного изменить его, чтобы иметь навигационный контроллер и использовать его rootViewController в качестве вида таблицы. Мой взгляд корневой класс контроллера для моей навигации контроллера называется «firstLevelViewController»

В примере кода он говорит

[rootViewController.tableView reloadData]; 

Я хочу сказать [navController.firstLevelViewController.tableView reloadData]

, но я получаю сообщение об ошибке сказав «запрос члена firstLevelViewController в чем-то не является структурой или объединением »

Как я могу ссылаться на rootViewController навигационного контроллера из главного делегата приложения?

ответ

3

В UINavigationController нет firstLevelViewController. Если вы хотите получить доступ к текущему контроллеру можно использовать

UITableViewController* firstLevelViewController = navController.topViewController; 
assert([firstLevelViewController isKindOfClass:[UITableViewController class]]); 
[firstLevelViewController.tableView reloadData]; 

Если firstLevelViewController означает, что контроллер представления в нижней части можно использовать

UITableViewController* firstLevelViewController = [navController.viewControllers objectAtIndex:0]; 
.... 
+0

AH! Огромное спасибо. То, что я имел в виду под «firstLevelViewController», было по умолчанию первым корневым экраном, отображаемым навигационным управлением. Я читал в книге, что это всегда существует. Если я всегда хочу обратиться к этому первомуLevelViewController, к которому я подключен, я бы использовал метод objectAtIndex: 0? – dubbeat

+0

@ dubbeat: Да. Но может быть более эффективным хранить значение в некоторых свойствах вашего делегата приложения или статической глобальной переменной. – kennytm

+0

спасибо !!!!!!!!! – SpaceDog

0

Доступ к RootViewController так:

Цель -C

YourViewController *rootController =(YourViewController*)[[(YourAppDelegate*) 
           [[UIApplication sharedApplication]delegate] window] rootViewController]; 

Swift

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
let viewController = appDelegate.window!.rootViewController as YourViewController 
Смежные вопросы