UIAlertView 不会委托
UIAlertView wont delegate
我尝试通过以下方式从 UIAlertView 获取内容:
UIAlertView *loginView = [[UIAlertView alloc] initWithTitle:@"Login"
message:@"Please enter user and pass"
delegate:self
cancelButtonTitle:@"Abort"
otherButtonTitles:@"Login", nil];
[loginView setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
[loginView show];
然后
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1)
{
UITextField *username = [alertView textFieldAtIndex:0];
NSLog(@"username: %@", username.text);
UITextField *password = [alertView textFieldAtIndex:1];
NSLog(@"password: %@", password.text);
}
}
在我的 .h 文件中
@interface loginTest : UIViewController <UIAlertViewDelegate>
这里有什么问题?
我认为你的问题遗漏了一些导致问题的重要细节,所以答案来自对你最后发表的评论的推测。您需要让所有视图控制器实现将呈现 UIAlertView
的警报视图委托。听起来您在 ViewController
中实现了委托,但没有在 abc
中实现。为了进一步解释,这里有一个代码解释。
假设您有 ViewControllerA
和 ViewControllerB
。在 ViewControllerA.h
:
@interface ViewControllerA : UIViewController <UIAlertViewDelegate>
在 ViewControllerB.h
中:
@interface ViewControllerB : UIViewController <UIAlertViewDelegate>
那么在ViewControllerA.m
和ViewControllerB.m
中都需要实现:
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1)
{
// do stuff
}
}
当您显示 UIAlertView
并将委托设置为 self
时,self
指的是您当前所在的视图控制器。如果只有一个视图控制器实现了委托方法,并且不同的视图控制器显示警报,警报报告回呈现它的视图控制器(它不实现委托),因此它在完成时不做任何事情。我希望这回答了你的问题。
我尝试通过以下方式从 UIAlertView 获取内容:
UIAlertView *loginView = [[UIAlertView alloc] initWithTitle:@"Login"
message:@"Please enter user and pass"
delegate:self
cancelButtonTitle:@"Abort"
otherButtonTitles:@"Login", nil];
[loginView setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
[loginView show];
然后
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1)
{
UITextField *username = [alertView textFieldAtIndex:0];
NSLog(@"username: %@", username.text);
UITextField *password = [alertView textFieldAtIndex:1];
NSLog(@"password: %@", password.text);
}
}
在我的 .h 文件中
@interface loginTest : UIViewController <UIAlertViewDelegate>
这里有什么问题?
我认为你的问题遗漏了一些导致问题的重要细节,所以答案来自对你最后发表的评论的推测。您需要让所有视图控制器实现将呈现 UIAlertView
的警报视图委托。听起来您在 ViewController
中实现了委托,但没有在 abc
中实现。为了进一步解释,这里有一个代码解释。
假设您有 ViewControllerA
和 ViewControllerB
。在 ViewControllerA.h
:
@interface ViewControllerA : UIViewController <UIAlertViewDelegate>
在 ViewControllerB.h
中:
@interface ViewControllerB : UIViewController <UIAlertViewDelegate>
那么在ViewControllerA.m
和ViewControllerB.m
中都需要实现:
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1)
{
// do stuff
}
}
当您显示 UIAlertView
并将委托设置为 self
时,self
指的是您当前所在的视图控制器。如果只有一个视图控制器实现了委托方法,并且不同的视图控制器显示警报,警报报告回呈现它的视图控制器(它不实现委托),因此它在完成时不做任何事情。我希望这回答了你的问题。