仅在用户触摸屏幕后显示ViewController

时间:2019-12-04 21:13:53

标签: ios objective-c uiviewcontroller ios13

我有一个应用,其中我以模态形式显示菜单。然后,当用户选择菜单选项时,菜单将自行关闭,并在完成后根据用户选择的按钮模态显示另一个视图。

此方法以前可以完美运行,但是自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;
    }];
}

1 个答案:

答案 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;
        }];
    });