iPhone uinavigation - прыжок со страницы

Я новичок в кодировании iPhone, и у меня проблемы с управлением UINavigation.

У меня 3 вида (главное меню, новости и вход). Главное меню — это мое базовое представление в корневом контроллере, а затем я помещаю в стек представление входа или новостей, когда пользователь нажимает кнопку в главном меню. Однако, если я нахожусь на экране новостей и хочу переключиться на режим входа в систему, я ожидаю, что выскочит текущий вид (вернет меня в главное меню) и нажмет на режим входа. Однако этого не происходит, и я не уверен, почему...

Вот код моего AppDelegate:

@synthesize window;
@synthesize rootController;


- (void)applicationDidFinishLaunching:(UIApplication *)application {    

// Override point for customization after application launch
 [window addSubview:rootController.view];
[window makeKeyAndVisible];
}


- (IBAction)loadLoginView
{
 [self loadMainMenuView];
 LoginViewController *loginView = [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];
 [rootController pushViewController:loginView animated:YES];
 [loginView release];
}

- (IBAction)loadNewsView
{
 [self loadMainMenuView];
 NewsViewController *newsView = [[NewsViewController alloc] initWithNibName:@"NewsView" bundle:nil];
 [rootController pushViewController:newsView animated:YES];
 [newsView release];
}

- (IBAction)loadMainMenuView
{
 [rootController popToRootViewControllerAnimated:YES];
}

- (void)dealloc {
[window release];
 [rootController release];
[super dealloc];
}

Может ли кто-нибудь увидеть, что я делаю неправильно? Есть ли лучший способ справиться с этим? Спасибо!


person Rob Taylor    schedule 20.01.2010    source источник


Ответы (1)


Выполнение двух анимированных изменений viewController на навигационном контроллере не работает должным образом (они не поставлены в очередь). Попробуйте следующее:

- (IBAction)loadNewsView {
 [self loadMainMenuView];
 NewsViewController *newsView = [[NewsViewController alloc] initWithNibName:@"NewsView"     bundle:nil];
 [rootController pushViewController:newsView animated:YES];
 [newsView release];
}

В качестве альтернативы вы можете прослушать viewDidAppear в корневом контроллере представления navigationController и нажать новый контроллер представления только после того, как корень снова появится. Вам, вероятно, потребуется использовать некоторый BOOL, чтобы не всегда отображать контроллер просмотра новостей при появлении рута. Надеюсь, это имеет смысл.

person Felix Lamouroux    schedule 20.01.2010
comment
Спасибо, Феликс, я попытался удалить анимацию из кода popallviews, и это сработало... Однако тогда я остался без эффекта перехода. Теперь я пытаюсь понять, смогу ли я сделать это без NavigationController и просто управлять представлениями вручную. Еще раз спасибо! - person Rob Taylor; 20.01.2010