0

iOS のアプリで問題が発生しています。一部の ViewController を切り替えようとしていますが、正しく動作しません。

現在、3 つの ViewController があります。最初の ViewController はスプラッシュ イメージになり、特定の時間で 2 番目の ViewController に切り替わりますが、この瞬間、最初の View はボタンを使用してこのアクションを実行します。2 番目の View はログイン画面になりますが、これは複雑な操作を実行する 3 番目の ViewController に切り替えるボタンを備えた偽のログインです。

私の問題は、最初のViewControllerから2番目のViewControllerに切り替えるプロセスにあります。ボタンに関連付けられた IBAction を使用すると正しく動作しますが、NSTimer や performSelector/PerformSelectorOnMainThread などを使用すると正しく動作しません (アプリの向きが変わり、2 番目の 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 に答える