2013-02-14 3 views
0

У меня проблемы с моим приложением в iOS. Я пытаюсь переключиться между некоторыми ViewControllers, но он работает неправильно.Switching ViewController

Прямо сейчас у меня есть три ViewControllers, первый из которых будет отображать изображение и в определенное время переключится на второй ViewController, но в этот момент первый вид использует кнопку для выполнения этого действия. Второй вид будет экраном входа, но теперь это поддельный логин с кнопкой, переключающейся на третий ViewController, который будет выполнять некоторые сложные вещи.

Моя проблема заключается в переходе процесса с первого на второй ViewController. Если я использую IBAction, прикрепленную к кнопке, он работает правильно, но если я использую NSTimer или что-то вроде PerformSelector/PerformSelectorOnMainThread, он не работает должным образом (меняется ориентация приложения и кнопка во втором ViewController не работает).

ViewController1.m

#import "ViewController.h" 
#import "LoginViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    float timer=5.0; 
    [self performSelector:@selector(startAfterInterval) withObject:nil afterDelay:timer]; 
} 

- (void) startAfterInterval { 
    LoginViewController * loginViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 

    [[[self view] window] addSubview:loginViewController.view]; 
} 

- (IBAction)NextView:(id)sender { 
    LoginViewController * loginViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 

    [[[self view] window] addSubview:loginViewController.view]; 
} 
@end 

Может кто-нибудь мне помочь? спасибо в совете.

+0

Вместо представления нового контроллера просмотра используйте изображение, которое анимируется в течение 5 секунд и скрывает отображение вашего вида для входа. Это простое предложение. –

ответ

1

Я пробовал ваш код, и у меня были разные результаты, но они были неустойчивыми. Иногда, нажав кнопку в LoginViewController, работал, а в другое время он вызвал сбой. Причина этого заключается в том, что LoginViewController освобождается. Вы добавляете свой вид к окну, но не к контроллеру - это не так, как должно быть сделано. Если вы хотите просто изменить контроллеры без использования навигационного контроллера или модального представления, то вы должны изменить контроллер представления корневого окна вместо добавления вида:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    float timer=5.0; 
    [self performSelector:@selector(startAfterInterval) withObject:nil afterDelay:timer]; 
} 

- (void) startAfterInterval { 
    LoginViewController * loginViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 
    self.view.window.rootViewController = loginViewController; 
} 

- (IBAction)NextView:(id)sender { 
    LoginViewController * loginViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 
    self.view.window.rootViewController = loginViewController; 
} 

Оба метода будет работать хорошо, если вы делаете это так.

+0

Он отлично работает. Большое спасибо. Но я должен исследовать модальный способ. – tetoct