首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITapGestureRecognizer不点火

UITapGestureRecognizer不点火
EN

Stack Overflow用户
提问于 2019-08-03 10:41:08
回答 1查看 174关注 0票数 0

让我们把谷歌的结果排除在外吧

  • .userInteractionEnabled是真的
  • 视图被击中(使用带有-[UIWindow sendEvent:]po $arg3的符号断点)

现在来谈谈我是如何构造这个结构的,这是一种试图使模型从视图代码中完全删除的尝试。

重要的是我有这样的课程:

  • CarModel -纯数据
  • CarModelDisplayClass --一个带有模型的类,它可以符合DisplayableTappable。这是后面的BuilderClass将要处理的类,它基本上充当了模型和视图之间的桥梁。
  • 协议Displayable -使类返回一个视图,以便后面的BuilderClass附加到视图/屏幕
  • 协议Tappable - BuilderClass查看一致性,将一个点击手势附加到视图(从Displayable协议返回)

Builder的工作方式如下:

  1. 硬代码-构建一堆CarModels
  2. 硬代码-用模型构建一堆CarModelDisplayClass
  3. 将CarModelDisplayClass列表发送到将列表转换为实际视图和手势识别器的方法(通过查看协议一致性)
  4. 将这些视图附加到实际的UIViewController
  5. 呈现UIViewController

在这一点上,除了UITapGestureRecognizer之外,一切都能工作。

CarModelDisplayClass到实际的views+gestures如下所示。

代码语言:javascript
复制
for item in items {
    let view = item.view() // Get the view from the Displayable protocol
    superView.addSubview(view)

    if let i = item as? Tappable { // Check Tappable conformance
        let gesture = UITapGestureRecognizer(target: i, action: #selector(i.tapped))
        view.addGestureRecognizer(gesture)
        view.isUserInteractionEnabled = true
    }
}

我不确定是否有什么明显的东西我错过了。我想可能有一些与目标i有关的问题,但是我也尝试过将它指向item (如果这一点我不知道的话)。

任何指示都会有帮助。

我这里有真正的代码(虽然它有不同的名字)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-03 12:04:56

看起来,您必须在代码中的某个地方保留对可访问项的强烈引用,否则它们将从内存中删除。

基于附加链接中的代码-我将更改TLAStackviewBuilder类以返回UIScrollView,但其中包含对displayRows的引用。

在上面编写的代码中:

代码语言:javascript
复制
class Something {

  let storedItems: [Any]!

  func someFunc(items: Tappable) {
     storedItems = items

     for item in items {
        let view = item.view() // Get the view from the Displayable protocol
        superView.addSubview(view)

        if let i = item as? Tappable { // Check Tappable conformance
          let gesture = UITapGestureRecognizer(target: i, action: #selector(i.tapped))
          view.addGestureRecognizer(gesture)
          view.isUserInteractionEnabled = true
        }
    }
  }


}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57337556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档