presentModalViewController и NavigationController

#iphone #ios4 #uinavigationcontroller #presentmodalviewcontroller

#iPhone #ios4 #uinavigationcontroller #presentmodalviewcontroller

Вопрос:

Я хочу знать различия между

[self presentModalViewController:controller animated:YES];

и

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

Я использовал оба, но до сих пор не знаю или не заметил разницы. когда следует использовать один из них?

Спасибо..

Комментарии:

1. Краткое изложение документации Apple для разработчиков: Чаще всего приложения используют контроллеры модальных представлений в качестве временного прерывания для получения ключевой информации от пользователя. Контроллеры навигации используются для управления представлением иерархических данных. Или ваш вопрос «Что происходит за кулисами?»

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

3. Если отличается, означает вопрос типа «что вы хотите сделать с этим изображением? -> загрузить -> удалить -> отменить» и после этого действия вы возвращаетесь к своему изображению, тогда да.

Ответ №1:

Основное различие :

pushViewController работает только в навигационных контроллерах

presentModalViewController работает для всех контроллеров просмотра

NavigationController — это ваш экземпляр UINavigationController , который используется всеми контроллерами в вашем навигационном стеке ( UIViewController ).

Ответ №2:

Представление модального представления представляет представление поверх другого представления. Вы выполняете их, как правило, для «задач», которые необходимо запускать и завершать автономным способом. Подробнее о модальных представлениях читайте в руководствах Apple для разработчиков.

Передача представления на контроллер навигации отличается там, где логически необходима навигация в приложении. Скажем, таблица детализации, как в приложении настроек iDevices, где есть основные настройки, затем вы переходите к дополнительным настройкам и т.д.

Каковы бы ни были ваши вопросы, если они носят концептуальный и общий характер, я бы настоятельно посоветовал вам поискать в Google «Руководство по программированию X», которое приведет вас к правильному руководству Apple по программированию 🙂 X = view controller в вашем случае

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

Ответ №3:

если базовый класс имеет свой собственный NavigationController, тогда вы можете написать:

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

если ваш базовый класс имеет только UIViewController, используйте:

 MyViewController * objMyViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:objMyViewController];
navController.navigationItem.leftBarButtonItem  = nil;  // make nil if you want
                                                        // to use it in next View
[self presentModalViewController:navController animated:YES];
  

теперь у MyViewController есть навигация, поэтому вы можете — Нажать — на другой ViewController, написав функцию, как показано ниже, в MyViewController.

 -(IBAction)btnNext_click {
    SecondViewController * objSecondViewController = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
    [self.navigationController pushViewController:objSecondViewController animated:YES];
}
  

Комментарии:

1. но второе представление появится за контроллером модального представления