由于某种原因,此代码不是按顺序执行的。 Xcode似乎正在评估if-else语句,然后在显示if-else语句之前的UIAlertView
之前显示if-else语句中的UIAlertView
。
以下是我的代码供您参考:
- (IBAction)btnLogin:(id)sender; {
//self.tbxUsername.text = [NSString stringWithFormat:@"vmcv"];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Email"
message: [NSString stringWithFormat: @"%@", acc.Email]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
if([self.tbxUsername.text isEqualToString:acc.Email ])
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Authentication"
message: @"Success"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Authentication"
message: @"Fail"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
答案 0 :(得分:0)
绘图不是实时进行的。您发出绘图命令,并且在您退出方法后,实际上会在事件循环中绘制屏幕。您无法单步浏览并看到屏幕得到更新。因此,您需要显示第一个警报,退出方法,而不是在第一个警报中显示从退出方法(按下按钮)调用的第二个警报。
答案 1 :(得分:0)
您不应该像这样顺序显示多个UIAlertView。您需要等到前一个被解除,然后在委托回调中显示新的。
您将希望能够识别哪个UIAlertView正在调用委托方法,因此设置一些属性来保存您的UIAlertView。
@property (nonatomic, strong) UIAlertView *emailAlertView, *successAlertView, *failureAlertView;
按下按钮后,您只会启动第一个要求发送电子邮件的UIAlertView。确保更新了代码以将委托设置为self,并且视图控制器实现了UIAlertViewDelegate协议。
- (IBAction)btnLogin:(id)sender; {
self.tbxUsername.text = [NSString stringWithFormat:@"vmcv"];
self.emailAlertView = [[UIAlertView alloc] initWithTitle:@"Email"
message: [NSString stringWithFormat: @"%@", acc.Email]
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[self.emailAlertView show];
}
现在实现委托方法,只有在第一个UIAlertView被解除后才显示下一个UIAlertView。
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
if(alertView == self.emailAlertView) {
if([self.tbxUsername.text isEqualToString:acc.Email])
{
self.successAlertView = [[UIAlertView alloc] initWithTitle:@"Authentication"
message: @"Success"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[self.successAlertView show];
}
else
{
self.failureAlertView = [[UIAlertView alloc] initWithTitle:@"Authentication"
message: @"Fail"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[self.failureAlertView show];
}
}
else if(alertView == self.successAlertView) {
//handle dismiss event of success alert view
}
else if(alertView == self.failureAlertView) {
//handle dismiss event of failure alert view
}
}
这应该达到您正在寻找的“连续”效果。