我们在应用中处理信用卡交易。每当交易被拒绝或任何错误,我们将返回上一屏幕,我们要求客户使用另一张信用卡。
PaymentController.m
[sharedVtp processSaleRequest:saleRequest
completionHandler:^(VTPSaleResponse* response)
{
[self saleRequestComplete:response];
}
errorHandler:^(NSError* error)
{
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Your transaction is declined" message:@"Please use another card and proceed" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
[self.navigationController popViewControllerAnimated:YES];
});
}];
控件返回上一屏幕,但屏幕冻结。我们无法点击该屏幕上的任何按钮。
答案 0 :(得分:2)
正如其他人所说,UIAlertView
hella 已弃用,您应该使用UIAlertController
。此外,如上所述,您无法显示警报,然后在显示警报时弹出视图。
以下是如何修复它(替换主队列块中的内容):
UIAlertController *alert = [UIAlertController alertControllerWithTitle: @"Your transaction is declined"
message:@"Please use another card and proceed"
preferredStyle: UIAlertControllerStyleAlert];
[alert addAction: [UIAlertAction actionWithTitle: @"OK" style: UIAlertActionStyleDefault handler: ^(UIAlertAction *action) {
[self.navigationController popViewControllerAnimated:YES];
}]];
[self presentViewController: alert animated: YES completion: nil];
请注意,现在只在UIAlertController
的动作处理程序中调用pop调用,这意味着只有在用户按下OK按钮后才会调用。
根据您要执行的操作,您还可以使用类似Toast的样式UIAlertController
,不添加任何UIAlertAction
,而是在警报控制器上调用dismiss它出现几秒后(在presentViewController
通话的完成块中,使用调用后的调度)。
答案 1 :(得分:0)
您正在显示提醒。提醒是模态的;当警报存在时,用户不能点击除警报之外的任何其他内容。所以只需显示提醒并停止。用户现在必须与警报进行交互。在用户解除警报之前,请勿尝试执行任何其他操作。 然后你可以在其他地方导航。
停止使用UIAlertView。你应该使用UIAlertController。