1

我的应用程序中有 5-6 个视图控制器,为此我正在使用导航控制器。现在我要做的是:从输入一个视图控制器到另一个,一个 UIAlertView 框出现并单击“否”,它应该弹出视图控制器并转到前一个。我已经尝试过 PopToViewController: animated 和 PopViewController:Animated 但它们都不起作用。谁能告诉我这是否可能?如果是,如何?

在警报框上按“否”时,我可以在控制台上打印任何内容,但视图没有弹出。有什么建议么?

谢谢维克

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];

在上面的示例中,“确定”按钮将是索引 0,而“否”按钮将是索引 1。因此,当您实现alertview:clickedButtonAtIndex:委托方法时,您可以检查用户是否点击了右键,然后执行控制器弹出操作。

-(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 回答