我在iOS上的应用程序出现问题。我正在尝试在一些ViewControllers之间切换,但它不能正常工作。
现在我有三个ViewControllers,第一个是启动图像,在特定的时间会切换到第二个ViewController,但现在第一个视图使用一个按钮来执行此操作。第二个视图将是一个登录屏幕,但现在它是一个假登录,有一个按钮切换到第三个ViewController,这将执行一些复杂的操作。
我的问题是在从第一个ViewController切换到第二个the的过程中。如果我使用附加到按钮上的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有人能帮帮我吗?谢谢你的建议。
发布于 2013-02-14 15:23:19
我尝试了你的代码,我得到了不同的结果,但它们不稳定。有时,在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;
}如果你这样做,这两种方法都会工作得很好。
https://stackoverflow.com/questions/14869183
复制相似问题