0

我在 iOS 上的应用程序出现问题。我试图在一些 ViewControllers 之间切换,但它不能正常工作。

现在我有三个 ViewController,第一个是启动图像,在特定时间会切换到第二个 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

有人可以帮我吗?感谢您的建议。

4

1 回答 1

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;
}

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

于 2013-02-14T07:23:19.323 回答