我有一个带有桌子的叠加层,我想在背景中添加一个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);
}
答案 0 :(得分:2)
self.blackView.isUserInteractionEnabled = true;
是您需要添加到blackView
(UIView
)。
没有它,视图没有启用任何交互,因此不会触发手势识别器的目标/动作。
忽略事件。
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程序员更具可读性