我有一个应用,其中我以模态形式显示菜单。然后,当用户选择菜单选项时,菜单将自行关闭,并在完成后根据用户选择的按钮模态显示另一个视图。
此方法以前可以完美运行,但是自iOS 13起,它的行为很奇怪。基本上,只有在用户触摸屏幕时,它才会显示第二个视图,而且我一生都无法找到为什么它会以这种方式运行。
这是我的代码(我在流程停止的地方添加了日志):
extension UIImage {
@objc(UIImageAssetItem)
class AssetItem: NSObject {
}
}
let cls = NSClassFromString("UIImageAssetItem")
更新:使用计时器帮助延迟代码,但我认为这是肮脏的破解,希望找到更好的解决方案。
- (void) dismissPopUpMenu:(UIButton *)sender {
[self dismissViewControllerAnimated:NO completion:^{
if ( (sender.tag == 13 ) {
[self openPopUpWindow:sender];
}
}];
}
- (void) openPopUpWindow:(UIButton *)sender {
interactionDisabledLayer.alpha = 1.0f;
PopUpViewController *popUpController = [[PopUpViewController alloc] initWithPopUp:sender.tag];
popUpController.delegate = self;
NSLog(@"We get to here without problems.");
[self presentViewController:popUpController animated:NO completion:^{
NSLog(@"It only enters here if we touch the screen.");
self->interactionDisabledLayer.alpha = 0.0f;
}];
}
答案 0 :(得分:0)
使用第二个计时器延迟呈现第二个UIViewController的代码似乎有所帮助,但这是一个相当肮脏的技巧,我想找到一个更好的解决方法。如果有人有合适的解决方案,请将其发布为答案,我将接受为最佳。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self presentViewController:popUpController animated:NO completion:^{
self->interactionDisabledLayer.alpha = 0.0f;
}];
});