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

Обычно я использую UIViews для создания своих приложений, но здесь я использую контроллер навигации. Я подталкиваю представление к вершине, где я хочу добавить элементы в массив. Однако я не могу получить доступ к основным методам контроллера навигации и т. Д. Вот настройка

1) AppDelegate добавляет контроллер навигации

[window addSubview:navigationController.view];

2) В RootViewController я нажимаю новый UIView

AddNewViewController *addNewViewController = [[AddNewViewController alloc] init];
[self presentModalViewController: addNewViewController animated:YES];

3) Затем из AddNewViewController я хочу получить доступ к основному RootViewController, но не могу получить доступ ни к чему. Все методы и т. Д. Объявлены так же, как я делал это раньше (используя UIViews). Этот код ничего не может найти в RootViewController.

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.navigationController myFunction];

У меня есть функция myFunction в файле RootViewController.h. Я использовал этот метод раньше, но никогда не работал с контроллером навигации. Я предполагаю, что это как-то связано со стеком hte - но я не могу понять, что я сделал не так!

Помощь очень ценится !!

* ОБНОВЛЕНИЕ *

Я сейчас использовал

AddNewViewController *addNewViewController = [[AddNewViewController alloc] init];
[self.navigationController pushViewController:addNewViewController animated:YES];

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

[self.navigationController.mainTableView reloadData];   

но mainTableView недоступен. Я объявил и синхронизировал это, но до сих пор не вижу. Я также попытался перебрать и использовать элемент [0] стека (как показано ниже), но и с этим ничего не добился!

NSArray *controllers = [[NSArray alloc] initWithObjects:self.navigationController.viewControllers, nil];

UIViewController *tmpController = [[UIViewController alloc] init];
tmpController = [controllers objectAtIndex:0];

person Matt Facer    schedule 10.10.2010    source источник
comment
В каком методе вы хотите получить доступ к self.navigationController? Если вы попытаетесь получить к нему доступ до того, как представление будет помещено в стек, self.navigationController будет равен нулю.   -  person Matthias Bauch    schedule 10.10.2010


Ответы (1)


Прежде всего,

[self presentModalViewController: addNewViewController animated:YES];

делает что-то другое, чем

[self.navigationController pushViewController:addNewViewController animated:YES];

Названия этих методов должны говорить сами за себя.


И appDelegate.navigationController не является вашим rootViewController. Это UINavigationController. Вы можете получить NSArray viewControllers, прикрепленный к контроллеру навигации, с помощью self.navigationController.viewControllers. Элемент с индексом 0 должен быть вашим rootViewController.

Если вы поместите viewController в стек navigationControllers, нет необходимости использовать appdelegate. Вы можете получить доступ к navigationController с помощью self.navigationController.

person Matthias Bauch    schedule 10.10.2010
comment
ах, в этом есть смысл - спасибо и за код pushviewcontroller. Я поменял его на это, и мне стало намного лучше. Я обновил свой пост, добавив новый код. - person Matt Facer; 10.10.2010