2012-03-15 3 views
2

Я создаю приложение, которое в настоящее время имеет 3 ViewControllers. Один из них используется после успешного входа в систему, поэтому в этом вопросе не имеет значения.Возврат к первому ViewController из второго ViewController

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

Первый ViewController построен в моей «MainStoryboard». Он имеет форму входа и кнопку информации внизу. Я связываю это с моей AppDelegate, выполнив следующие действия внутри didFinishLaunchingWithOptions:

ViewController *viewController = (ViewController *)self.window.rootViewController; 

Потому что я хотел, чтобы заставить рендеринг UIWebView (другая история) Я создаю второй вид программно. Я следующий внутри didFinishLaunchingWithOptions:

infoViewController = [[InfoViewController alloc] init]; 
[infoViewController view]; 

Внутри обоих моих ViewControllers я настроить ссылку на AppDelegate, как показано ниже:

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

У меня есть кнопка информации в моем первом ViewController который берет вас infoViewController. Он вызывает следующий код при постукивании:

appDelegate.infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:appDelegate.infoViewController animated:YES]; 

Вышеприведенные прекрасно работает для меня, переворачивает экран и показывает InfoViewController.

На моем InfoViewController у меня есть кнопка, которая должна вернуть вас на страницу входа в систему, я пробовал все виды, чтобы заставить это работать, но это просто сбой моего приложения. Ничто не работает. Я попробовал следующее:

appDelegate.viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:appDelegate.viewController animated:YES]; 

и

[self.navigationController popToRootViewControllerAnimated:YES]; 

и

[self.navigationController popViewControllerAnimated:YES]; 

и

[self.navigationController popToViewController:appDelegate.viewController animated:YES]; 

я подозреваю, последний 3 может быть больше, чтобы сделать с тем, когда вам иметь контроллер навигации и вы хотите вернуться к корню? Я не уверен, но в любом случае это не сработает. Раньше у меня была работа с использованием раскадровки, поэтому я уверен, что это должно быть легко! Как уже упоминалось, я переключился на создание программного обеспечения infoViewController, чтобы я мог заставить UIWebView визуализировать до появления представления.

Любая помощь очень ценится.

+0

Я думаю, что нижеприведенные ответы на приглашение отчиститьModalViewController верны. На стороне примечания, что вы делаете с помощью [просмотра InfoViewController]; ?? Кроме того, вы можете настроить стиль перехода контроллера при его создании. – danh

+0

Привет, я попробую предложения ниже чуть позже (конец моего перерыва на обед и обратно к моей работе PHP/JS). [просмотр InfoViewController] буквально показывает UIWebView, содержащий некоторую информацию об этом приложении. Я подозреваю, что, может быть, вы думаете, что я должен просто показать эту информацию в другом представлении в первом ViewController? Я действительно занимаюсь ObjC/iOS в течение 3-4 недель, поэтому, вероятно, я не полностью придерживаюсь лучших практик. –

+0

Gotcha, но просмотр - это свойство ViewController. Это представление управляется контроллером представления ... не глаголом, а существительным. Я думаю, что это нуль в момент, когда вы просите об этом. (Это может привести к изменению состояния при первом загрузке контроллера представления из ниба, который должен выполнять первую, ленивую загрузку представления, но вам, как правило, не нужно беспокоиться об этом. Презентация просто работает) , Попробуйте прокомментировать эту строку и посмотрите, не ведет ли она себя одинаково. – danh

ответ

6

Вы можете сделать с:

[self dismissModalViewControllerAnimated:YES]; 
+0

Спасибо большое :) –

5

Вы должны использовать это.

[self dismissModalViewControllerAnimated:YES]; 
+0

Спасибо большое :) –

1

Вы должны использовать главный контроллер для переключения между другими контроллерами. Измените представление вашего корневого контроллера на один из ваших других контроллеров представлений (при необходимости применяйте анимацию).Удерживайте указатель на свой корневой контроллер в других контроллерах вида и звоните self.rootController.view = <desired_controller_instance>.view

0

Я думаю, что способ, которым вы представляете свой InfoViewController, неверен. Сделайте это следующим образом:

В вашем ViewController, создать действие для кнопки инфо .:

- (IBAction)infoButtonTapped:(id)sender 
{ 
    InfoViewController *infoViewController = [[InfoViewController alloc] init]; 
    infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [self presentModalViewController:infoViewController animated:YES]; 
} 

И в вашем InfoViewController в действие вашей кнопки, которые должны принять вас обратно написать это:

- (void)takeBackToViewController 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 

Надеюсь, он сработает.

0

Кроме того, в представленном контроллера вы можете использовать этот

if(self.parentViewController) 
    [self.parentViewController dismissModalViewControllerAnimated:YES]; 
else 
    [self.presentingViewController dismissModalViewControllerAnimated:YES]; 

Для dissmiss регулятора тока.

Смежные вопросы