未调用 UIAlertAction 完成块 - iOS
UIAlertAction completion block not called - iOS
我有一个 iOS 应用程序,它带有一个 UIAlertController,当用户点击按钮时,会在我的应用程序中呈现一个动作 sheet。
一切都很好,除了一件事,完成块由于某种原因没有被调用。
这是我的代码:
// Setup the alert information/type.
UIAlertController *action_view = [UIAlertController alertControllerWithTitle:@"Test title" message:@"test message" preferredStyle:UIAlertControllerStyleActionSheet];
// Create and add the cancel button.
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
[action_view dismissViewControllerAnimated:YES completion:^{
NSLog(@"asdhfgjk");
}];
}];
// Add the action button to the alert.
[action_view addAction:cancel];
// Present the alert to the user.
[self presentViewController:action_view animated:YES completion:nil];
如果您 运行 该代码,您将看到关闭控制器的行不会 运行 并且其中的 NSLog
语句也不会。但是,如果您删除 NSLog
并将完成块设置为 nil,那么它会 运行... 为什么???
丹,谢谢你的时间。
不要试图关闭警报控制器。当您的警报操作的处理程序被调用时,它将为您解除。
将 "cancel" 操作更改为:
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
NSLog(@"asdhfgjk");
}];
"cancel" 操作不应关闭 rmaddy 提到的视图控制器。但是,即使 "cancel" 操作设置为:
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
NSLog(@"asdhfgjk");}];
您可能会在未调用完成块时看到同样的问题。例如,实现这个(有点做作的)方法:
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
[[self presentedViewController] dismissViewControllerAnimated:flag completion:nil];
}
也可能有这种效果,因为 UIAlertController 在调用完成块之前被关闭。
我有一个 iOS 应用程序,它带有一个 UIAlertController,当用户点击按钮时,会在我的应用程序中呈现一个动作 sheet。
一切都很好,除了一件事,完成块由于某种原因没有被调用。
这是我的代码:
// Setup the alert information/type.
UIAlertController *action_view = [UIAlertController alertControllerWithTitle:@"Test title" message:@"test message" preferredStyle:UIAlertControllerStyleActionSheet];
// Create and add the cancel button.
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
[action_view dismissViewControllerAnimated:YES completion:^{
NSLog(@"asdhfgjk");
}];
}];
// Add the action button to the alert.
[action_view addAction:cancel];
// Present the alert to the user.
[self presentViewController:action_view animated:YES completion:nil];
如果您 运行 该代码,您将看到关闭控制器的行不会 运行 并且其中的 NSLog
语句也不会。但是,如果您删除 NSLog
并将完成块设置为 nil,那么它会 运行... 为什么???
丹,谢谢你的时间。
不要试图关闭警报控制器。当您的警报操作的处理程序被调用时,它将为您解除。
将 "cancel" 操作更改为:
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
NSLog(@"asdhfgjk");
}];
"cancel" 操作不应关闭 rmaddy 提到的视图控制器。但是,即使 "cancel" 操作设置为:
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
NSLog(@"asdhfgjk");}];
您可能会在未调用完成块时看到同样的问题。例如,实现这个(有点做作的)方法:
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
[[self presentedViewController] dismissViewControllerAnimated:flag completion:nil];
}
也可能有这种效果,因为 UIAlertController 在调用完成块之前被关闭。