切换ViewController

时间:2013-02-14 06:43:03

标签: ios views switch-statement viewcontroller

我在iOS上的应用程序遇到了问题。我试图在一些ViewControllers之间切换,但它无法正常工作。

现在我有三个ViewControllers,第一个将是一个启动图像,并在特定时间内切换到第二个ViewController,但在这一刻,第一个View使用一个按钮来执行此操作。第二个View将是一个登录屏幕,但现在它是一个虚假的登录,其中一个按钮切换到第三个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

有人能帮帮我吗?谢谢你的建议。

1 个答案:

答案 0 :(得分: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;
}

如果你这样做,两种方法都可以正常工作。