1

アプリケーションに5〜6個のビューコントローラーがあり、そのためにナビゲーションコントローラーを使用しています。今私がやろうとしていることは次のとおりです。あるビューコントローラーから別のビューコントローラーに入ると、UIAlertViewボックスが表示され、[いいえ]をクリックすると、ビューコントローラーがポップされて前のビューコントローラーに移動します。PopToViewController:animatedとPopViewController:Animatedを試しましたが、どれも機能していません。それが可能かどうか誰か教えてもらえますか?はいの場合、どのように?

警告ボックスで「いいえ」を押すと、コンソールに何でも印刷できますが、ビューが表示されません。助言がありますか?

ありがとうVik

4

1 に答える 1

0

答えは、「ビュー」によって UIViewController を参照していること(コントローラーのみをプッシュ/ポップできるため)、および pushViewController:animated:ナビゲーションコントローラーのセレクターによってこのコントローラーを呼び出していることを前提としています。

UIAlertViewDelegateそのため、コントローラーの .h ファイルに実装する必要があります

@interface MyController : UIViewController <UIAlertViewDelegate> {

}

@end

次に、UIAlertView を作成するときに、ボタンのインデックスを適切に確認してください。

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"No", nil];

[alert show];
[alert release];

上記の例では、「OK」ボタンのインデックスは 0 で、「いいえ」ボタンのインデックスは 1 です。したがって、alertview:clickedButtonAtIndex:デリゲート メソッドを実装すると、ユーザーが右のボタンをタップしたかどうかを確認してから、コントローラーの pop アクションを実行できます。

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (buttonIndex == 1) { //button NO licked
        [self.navigationController popViewControllerAnimated:YES];
    }

}

編集:

必ずインスタンス化してくださいUINavigationController。そうしないと、コントローラーのnavigationControllerプロパティが nil になります。

tabBarController = [[UITabBarController alloc] init];
tabBarController.view.frame = CGRectMake(0, 0, 320, 460);
NSMutableArray *controllers = [[NSMutableArray alloc] initWithCapacity:1];
ownerController *oController = [[ownerController alloc] init];

//navigation controller creation
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController: oController];
[oController release]; 
//adds navigation controller to collection of controllers
[controllers addObject:nav]; 

[tabBarController setViewControllers:controllers]; 
[controllers release];   
[self.view addSubview:[tabBarController view]];
于 2011-05-03T01:30:26.470 に答える