UINavigationController - основы - PullRequest
0 голосов
/ 13 июля 2011

Я пытаюсь использовать UINavigationController, но я не знаю, как.До сих пор (около года) я использовал presentModalViewController и dismissModalViewController для представления / отклонения контроллеров представления.

Итак, это то, что я сделал.Мой основной контроллер вида (первый, который отображается при запуске) называется MainViewController, и он расширяет UIViewController.

Итак, я сделал эту функцию запуска в моем делегате приложения:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    MainViewController *controller = [[MainViewController alloc] init];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];  
    [self.window addSubview:navigationController.view];  
    [self.window makeKeyAndVisible];

    return YES;
}

И вМетод viewDidLoad моего MainViewController:

- (void)viewDidLoad {

        [super viewDidLoad];

        self.title = @"Title";
        self.navigationController.navigationBar.tintColor = [Constants barColor];

            ....more code...
    }

Но в моем MainViewController я хотел бы представить еще один контроллер представления, называемый SecondViewController, для которого требуется UINavigationBar с кнопкой со стрелкой назад.Поэтому я могу заставить SecondViewController расширять UIViewController и делать то же самое, устанавливая title и backButton в методе viewDidLoad?И как мне это представить?Что я должен сделать для этого?

Ответы [ 3 ]

1 голос
/ 06 декабря 2011

UINavigationController является подклассом UIViewController, но, в отличие от UIViewController, он обычно не предназначен для вас подкласса. Это связано с тем, что сам навигационный контроллер редко настраивается за пределы визуальных элементов навигационной панели. Экземпляр UINavigationController может быть сравнительно легко создан либо в коде, либо в файле XIB. Пожалуйста, посетите " Как программно добавить UINavigationController "

1 голос
/ 13 июля 2011

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

Вот где происходит волшебство:

UIViewController *controller = [[UIViewController alloc] initWithNibName:@"MyNib" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
[controller release];

Контроллер навигации выполняет всеработать для вас (кнопки назад, заголовки, анимации) - он отслеживает!


Мой рабочий процесс такой:

Установите MutableArray в viewDidLoad, добавьте к нему контроллеры, например:

NSMutableArray *array = [[NSMutableArray alloc] init];
MyCustomViewController *customView = [[MyCustomViewController alloc] initWithNibName:@"nib" bundle:@"nil"];
customView.title = @"Second Level";
[array addObject:customView];
self.controllers = array;

Тогда в вашем делегате:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger row = [indexPath row];
    UIViewController *childControllerToBe = [controllers objectAtIndex:row];
    [self.navigationController pushViewController:childControllerToBe animated:YES];
}

Об этом, а также о многом другом можно узнать, прочитав достойную книгу для начинающих, такую ​​как Начало разработки iPhone

Также, Apple Docs всегда хороши:)

0 голосов
/ 13 июля 2011

Вы должны толкнуть его на стек навигации.

Эта лекция на iPhone-курсе Стэнфорда многому научит вас о навигационных панелях. (Это краткое чтение)

По сути, вам нужен этот код:

[self.navigationController pushViewController:SecondView];

Вы можете использовать PopViewController для программного возврата, но кнопка «Назад» создается автоматически.

Вот некоторый исходный код из лекции. Он охватывает именно то, с чем у вас проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...