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 类必须符合您的代码未正确设置警报视图的委托。
您需要更改以下行,以便委托是适当的对象(例如,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 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章