методы доступа и переменные в первом навигационном контроллере из толкаемого вида - PullRequest
0 голосов
/ 10 октября 2010

Я обычно использую 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];

У меня есть моя функция в файле 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];

1 Ответ

0 голосов
/ 10 октября 2010

Прежде всего

[self presentModalViewController: addNewViewController animated:YES];

делает что-то отличное от

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

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


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

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

...