alertView:(UIAlertView *) alertView 方法在 Appdelegate 中不起作用

Posted

技术标签:

【中文标题】alertView:(UIAlertView *) alertView 方法在 Appdelegate 中不起作用【英文标题】:alertView:(UIAlertView *) alertView method not working in Appdelegate 【发布时间】:2014-06-23 02:50:49 【问题描述】:

我在 AppDelegate.m 文件中设置了 UIAlertView。

但是当我选择警报视图上的按钮时。

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

没有工作。

我在 AppDelegate.h 文件中设置了 UIAlertViewDelegate。

和我的 AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:        (NSDictionary *)launchOptions
        

         [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name:kReachabilityChangedNotification
                                               object:nil];

            NSString *remoteHostName = REACHABILITY_HOST;
            _hostReachability = [Reachability reachabilityWithHostName:remoteHostName];
            [_hostReachability startNotifier];

            return YES;
        

        - (void) reachabilityChanged:(NSNotification *)note
        
         if( [Reachability isExistNetwork] == NotReachable)
            
                UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil         message:@"my message" delegate:nil cancelButtonTitle:@"ok"         otherButtonTitles:@"set",nil];
                [alertView show];

            

        

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

            switch (buttonIndex) 

                case 0:
                    NSLog(@"ok!");
                    break;

                    // set
                case 1:

                    NSLog(@"set!");
                    NSURL*url=[NSURL URLWithString:@"prefs:root=WIFI"];
                    [[UIApplication sharedApplication] openURL:url];
                    break;

            
        

但是

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

没有进入这个方法。

有人知道发生了什么吗?谢谢。

【问题讨论】:

您的 appDelegate 类必须符合 例如:@interface AppDelegate : NSObject 【参考方案1】:

您的代码未正确设置警报视图的委托。

您需要更改以下行,以便委托是适当的对象(例如,self):

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil         message:@"my message" delegate:nil cancelButtonTitle:@"ok"         otherButtonTitles:@"set",nil];

【讨论】:

嗨 sapi,我曾尝试设置委托:nil 或 self,但该方法仍然无法正常工作。你可知道发生了什么?谢谢。 @dickfala - 你在哪里有委托方法alertView:clickedButtonAtIndex:?如果它在AppDelegate 中,并且您在构造函数中将委托设置为self,则应调用方法。你可能想试试alertView:didDismissWithButtonIndex: 我尝试成功,我将委托设置为自我,并“清理”我的项目。没关系!谢谢你,sapi~^^【参考方案2】:

你必须换行

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"my message" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:@"set",nil];
[alertView show];

通过这条线

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"my message" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@"set",nil];
[alertView show];

您必须将委托设置为自己才能调用委托方法。

【讨论】:

【参考方案3】:

检查 .h 文件中的委托引用。放上UIAlertViewDelegate

@interface YourViewController : UIViewController<UIAlertViewDelegate>

【讨论】:

以上是关于alertView:(UIAlertView *) alertView 方法在 Appdelegate 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有文本字段的 iphone alertview

UIAlertView 按钮框架都是0?

访问 alertView 的调用视图

UIAlertview 不会记录结果

UIAlertView使用全解

关于 iOS7 中的 AlertView App Crash