addTarget和addGestureRecognizer不工作,没有崩溃/错误

时间:2016-12-05 14:21:29

标签: ios swift3

我有一个带有桌子的叠加层,我想在背景中添加一个Tap手势识别器来关闭视图,并将叠加的目标添加到叠加层中的按钮,它也会做同样的事情。

叠加显示正常,但无论何时点击黑色背景或取消按钮,都不会发生任何事情。我在这里搜索了一个答案,但没有找到任何结果。我的代码如下,后面是叠加层的屏幕截图:

private static void configureLogger(String logDir, String logLevel, String logbackConf){
    LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
    try {
        JoranConfigurator configurator = new JoranConfigurator();
        configurator.setContext(context);
        context.reset();
        context.putProperty("LOG_DIR", logDir);
        context.putProperty("LOG_LEVEL", logLevel);
        ClassLoader classloader = Thread.currentThread().getContextClassLoader();
        InputStream is = classloader.getResourceAsStream(LOGBACK_CONF);
        configurator.doConfigure(is);
    } catch (JoranException je) {
        LOG.warn("Can not configure logger. Continue to execute the command.", je);
    }
    StatusPrinter.printInCaseOfErrorsOrWarnings(context);
}

enter image description here

2 个答案:

答案 0 :(得分:2)

self.blackView.isUserInteractionEnabled = true;

是您需要添加到blackViewUIView)。

没有它,视图没有启用任何交互,因此不会触发手势识别器的目标/动作。

忽略事件。

https://developer.apple.com/reference/uikit/uiview/1622577-isuserinteractionenabled

您可能还想在动画期间禁用它。

答案 1 :(得分:0)

在您的叠加层可见时,您是否对importedFileView的实例有强烈的引用?据我测试,当目标丢失时,所有操作都会被忽略。

例如,这不起作用:

@IBAction func someAction(_ sender: Any) {
    let ifv = importedFileView()
    ifv.showFormView()

    //`ifv` is released at the end of this method, then your overlays are shown...
}

这有效:

let ifv = importedFileView() //keep the instance as a property of your ViewController.
@IBAction func someAction(_ sender: Any) {
    ifv.showFormView()
}

以编程方式生成的UIView isUserInteractionEnabled默认为true。您无需将其明确设置为true

顺便说一句,您最好不要将非UIView类命名为...View,最好使您的类型名称以大写字母开头,这使得您的代码对经验丰富的Swift程序员更具可读性