首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换ViewController

切换ViewController
EN

Stack Overflow用户
提问于 2013-02-14 14:43:03
回答 1查看 468关注 0票数 0

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

现在我有三个ViewControllers,第一个是启动图像,在特定的时间会切换到第二个ViewController,但现在第一个视图使用一个按钮来执行此操作。第二个视图将是一个登录屏幕,但现在它是一个假登录,有一个按钮切换到第三个ViewController,这将执行一些复杂的操作。

我的问题是在从第一个ViewController切换到第二个the的过程中。如果我使用附加到按钮上的IBAction,它可以正常工作,但如果我使用NSTimer或类似于performSelector/PerformSelectorOnMainThread的东西,它就不能正常工作(应用程序方向改变,第二个ViewController中的按钮不起作用)。

ViewController1.m

代码语言:javascript
复制
#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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-14 15:23:19

我尝试了你的代码,我得到了不同的结果,但它们不稳定。有时,在LoginViewController中单击该按钮会起作用,有时则会导致崩溃。原因是LoginViewController正在被释放。您正在将它的视图添加到窗口,而不是控制器--这不是应该这样做的方式。如果您只想更改控制器而不使用导航控制器或模态表示,那么您应该更改窗口的根视图控制器,而不是添加视图:

代码语言:javascript
复制
- (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;
}

如果你这样做,这两种方法都会工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14869183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档