答えは、「ビュー」によって 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]];