iOS 8.3:警报视图取消按钮在AppDelegate中没有响应

时间:2015-06-04 07:18:05

标签: objective-c uialertview appdelegate ios8.3

我正在使用Xcode 6.3.2中的iOS 8.3中的项目,当我的Web服务返回错误时,我在AlertView类中放置了AppDelegate,但是当我尝试单击“取消”按钮时在模拟器上,它没有响应。有没有人面临同样的错误?

以下是我的代码:

UIAlertView *alertFailure = [[UIAlertView alloc] initWithTitle:@"Error Occured" message:@"Something went wrong" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];

[alertFailure show];

编辑1:根据请求添加了委托方法

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    // the user clicked OK
    if (buttonIndex == 0) {
    // do something here...
    alertView.hidden = YES;
}
}

编辑2:甚至没有感知代表

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate, UIAlertViewDelegate>

3 个答案:

答案 0 :(得分:0)

如果您还没有,则需要添加AppDelegate符合UIAlertViewDelegate的内容:

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate, UIAlertViewDelegate>

修改:我刚刚创建了一个empty project并将您的代码粘贴到applicationDidBecomeActive:中,然后就可以了。没有代表方法,没有任何东西。也许删除整个alertView:clickedButtonAtIndex:方法?

编辑2 :如果您的目标只是针对iOS 8+,那么您可以(并且应该在iOS 8中弃用UIAlertView)使用新的UIAlertController

UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Error Occurred"
                                                               message:@"Something went wrong."
                                                        preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                      handler:^(UIAlertAction * action) {}];

[alert addAction:defaultAction];
[self.window.rootViewController presentViewController:alert animated:YES completion:nil];

答案 1 :(得分:0)

您必须在应用程序中实现以下委托方法。

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

在这里,只要你点击取消按钮,它就可以正常工作。似乎您已经为UIAlertView设置了委托。

如果您仍然遇到任何问题,请告诉我。

答案 2 :(得分:0)

如果您的目标是iOS 8.3,您可以使用UIAlertController而不是UIAlertView,您不需要实现任何协议或设置委托,只需使用操作:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Error Occured"
                                                               message:@"Something went wrong"
                                                        preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"OK"
                                                 style:UIAlertActionStyleCancel
                                               handler:NULL];

[alert addAction:cancel];

[self presentViewController:alert
                   animated:YES
                 completion:nil];