我试图通过以下内容从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>
这里有什么问题?
答案 0 :(得分:2)
我认为您的问题缺少导致问题的一些重要细节,因此答案来自对您最后评论的推测。您需要让所有视图控制器实现将呈现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
指的是您当前所在的视图控制器。如果只有一个视图控制器实现了委托方法,并且一个不同的视图控制器显示警报,警报报告给呈现它的视图控制器(它没有实现代理),因此它完成后不会做任何事情。我希望这回答了你的问题。