0

didFinishWithResultでモーダルビューコントローラーを提示することは可能ですか?

ホーム、スタート、ログインの3つのビューを持つiPadアプリケーションがあります。開始およびログイン モーダル ビューは、ホーム ビューの開始およびログイン ボタンを使用して起動できます。

ログイン ボタンをクリックすると、ログイン ビューでログイン操作 (didFinishWithResult) が成功した後、ログイン ビューを閉じることができますが、開始ビューを起動することはできません。しかし、コントロールはホームビューに戻ったままです。

上記のシナリオでエラーは発生しません。

Appdeligate.m :

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

HomeViewController  * homeview=[[HomeViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:homeview];

self.rootViewController = navigationController;
[navigationController setNavigationBarHidden:YES];
self.rootViewController.view.frame = [[UIScreen mainScreen] applicationFrame];
[self.window addSubview:self.rootViewController.view];
[window makeKeyAndVisible];

以下は、ログインモーダルビューを提示するホームビューのメソッドです

ログイン モーダル ビューの提示

LoginViewController * vc1 = [LoginViewController loginViewControllerWithNavBar:YES]; 
vc1.boxLoginDelegate = self;
[self presentModalViewController:vc1 animated:YES];

注 : LoginVeiwController は、HomeViewController によって提供されるモーダル ビュー コントローラーです。以下のように LoginVeiwController を閉じることで、別のモーダル ビュー コントローラー (コントローラーの開始) を起動/提示するのは正しい方法ですか。LoginVeiwController が閉じられると、コントロールは StartViewController を起動/表示するのではなく、HomeVeiwContrrler に戻るためです。

ホーム ビュー:

以下は、ログインに成功するとログイン ビューを閉じ、スタート ビューを起動しようとするホーム ビューのメソッドです。

- (void)loginViewController:(LoginViewController *)loginViewController didFinishWithResult:(LoginResult)result {
    [self dismissModalViewControllerAnimated:YES];

    startview = [[[startViewController alloc] init] autorelease]; 
    [self.navigationController setNavigationBarHidden:YES];
    [self presentModalViewController:startview animated:YES];

}

ボタンのクリックで StartView を直接表示すると、うまく起動しますが、didFinishWithResult では起動しません

4

5 に答える 5

0

このようにしてみてください。お役に立てると思います。

 self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    HomeViewController  * homeview=[[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:homeview];
    [self.window addSubview:navigationController.view];
    [window makeKeyAndVisible];
return YES:
于 2012-06-18T10:57:26.150 に答える
0

currentViewController DissMiss のときにこの行を使用してから、次のコードを試してください...

[self performSelector:@selector(PresentView) withObject:nil afterDelay:0.2];

-(void)PresentView
{
    [self.navigationController presentModalViewController:startview animated:YES];
}

願っています、これはあなたを助けます.... :)

于 2012-06-18T18:07:24.247 に答える
0

アニメの話だと思います。前のコントローラーが閉じている間、

 [self presentModalViewController:startview animated:YES];

と呼ばれます。

アニメーションを NO に設定することで、私の推測を確認できます。または、私の提案を直接使用して、機能するかどうかを確認してください。

私が正しければ、それらを YES に戻すことができます。また、直接呼び出す代わりに

[self presentModalViewController:startview animated:YES];

あなたが試すことができます:

[NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(showController) userInfo:nil repeats:No];

 - (void)showController {
    [self presentModalViewController:startview animated:YES];
 }

編集:

私は最終的に、この同様の問題を以前に解決する方法を見つけました:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{    
    [UIView animateWithDuration:0.5 
                     animations:^{
                            [self dismissModalViewControllerAnimated:YES];
                     } 
                 completion:^(BOOL finished) {
                     NSURL *path = [info objectForKey:@"UIImagePickerControllerMediaURL"];
                     VideoConfirmViewController *videoConfirmCon = [[VideoConfirmViewController alloc]initWithFileURL:path];
                     [self presentModalViewController:videoConfirmCon animated:YES];
                 }
];
}
于 2012-06-18T10:57:10.460 に答える
0

非常に古い iOS バージョンとの互換性が必要ない場合は、使用することをお勧めします

 -(void)presentViewControllerAnimated:completion:
 -(void)dismissViewControllerAnimated:completion:

それ以外の

 -(void)presentModalViewController:animated:
 -(void)dismissModalViewController:animated:

この場合

- (void)loginViewController:(LoginViewController *)loginViewController didFinishWithResult:(LoginResult)result 
{
    [self dismissViewControllerAnimated:YES completion: ^{
        startview = [[[startViewController alloc] init] autorelease]; 
        [self.navigationController setNavigationBarHidden:YES];
        [self.presentingViewController presentViewControllerAnimated:YES completion:NULL];

    }];
}
于 2014-01-12T23:22:22.703 に答える
0

コードでこの行を再構築する必要があります [self dismissModalViewControllerAnimated:YES];。理由は、dismiss が呼び出されたときselfにコントローラーのコンテキストが失われ、そのため、行に [self presentModalViewController:startview animated:YES];コントローラーが表示されないためです。クイックテストするには、却下行にコメントして、自分の目で確かめてください。

于 2012-06-18T14:56:42.887 に答える