ios - 切换 View Controller

标签 ios view switch-statement viewcontroller

我在 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/

相关文章:

c - 为什么这个 switch case 程序在整数输入之后不接受字符输入?

ios - Unity iOS 应用程序大小重 1.2GB(实际大小)(Android 100MB)

ios - 在容器 View 中无约束(自动布局)调整 subview Controller 的大小

ios - Swift 可选类型问题

asp.net-mvc - 在 ASP.NET MVC 上使用绝对路径访问 View

安卓。如何动态更改整个 FrameLayout 的颜色而不仅仅是 View 背景的颜色?

c# - 有没有办法让我的 switch/case 进入 C# 中的下一个 case?

ios - VoiceOver 宣布按钮变暗而不是禁用

iphone - 相机 View 在 iPhone 上不起作用,但在其他 iPhone 上起作用

c++ - 寻找一个 MACRO 将两个字符加在一起用于 switch cases