我在 iOS 上使用应用程序时遇到问题。我正在尝试在一些 ViewController 之间切换,但它无法正常工作。
现在我有三个 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
谁能帮帮我?谢谢建议。
最佳答案
我尝试了你的代码,得到了不同的结果,但它们不稳定。有时,单击 LoginViewController 中的按钮有效,有时会导致崩溃。原因是 LoginViewController 被释放。您将其 View 添加到窗口,而不是 Controller - 这不是应该完成的方式。如果您只想更改 Controller 而不使用导航 Controller 或模式演示,那么您应该更改窗口的 Root View Controller 而不是添加 View :
- (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;
}
如果您这样做,两种方法都可以正常工作。
关于ios - 切换 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14869183/