从 UIAlertView 弹出视图警报

Posted

技术标签:

【中文标题】从 UIAlertView 弹出视图警报【英文标题】:Popping View from UIAlertView Alert 【发布时间】:2011-05-03 01:16:27 【问题描述】:

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

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

谢谢 维克

【问题讨论】:

设置动画参数为NO再试 【参考方案1】:

答案假定“视图”指的是 UIViewController(因为您只能推送/弹出控制器)并且您通过导航控制器上的 pushViewController:animated: 选择器调用此控制器。

鉴于此,您必须在控制器 .h 文件中实现 UIAlertViewDelegate

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

【讨论】:

@Felipe - 我正在做同样的事情。我可以在控制台上打印东西,但 popViewControllerAnimated: 功能不起作用。下面是相关代码: -(void)viewDidLoad [super viewDidLoad]; self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; UIAlertView *alertOwner = [[UIAlertView alloc] initWithTitle:@"你是所有者吗?" message:@"Owner Please" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes",nil]; [alertOwner 显示]; [alertOwner 发布]; - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex if(buttonIndex == 0) [self.navigationController popViewControllerAnimated:YES]; 你能展示一下实例化和调用这个控制器的代码吗? 我想这就是你想看到的:tabBarController = [[UITabBarController alloc] init]; tabBarController.view.frame = CGRectMake(0, 0, 320, 460); NSMutableArray *controllers = [[NSMutableArray alloc] initWithCapacity:1]; ownerController *oController = [[ownerController alloc] init]; [控制器添加对象:oController]; [o控制器释放]; [tabBarController setViewControllers:控制器]; [控制器发布]; [self.view addSubview:[tabBarController view]]; ownerController是继承UINavigationController的类吗?如果不是,那是您的问题,因为当您调用 pop 方法时 NavigationController 属性为空...我将编辑答案,以便您了解如何创建导航控制器。

以上是关于从 UIAlertView 弹出视图警报的主要内容,如果未能解决你的问题,请参考以下文章

自定义弹出框警报视图

检查 UIAlertView 是不是可见

我怎样才能拥有一个完全透明的 UIAlertView?

viewWillAppear UIAlertView 不显示

带有 UIActivityIndi​​catorView 的 iOS 7 样式弹出窗口/警报视图

iOS 应用程序在警报视图关闭时崩溃