让我们把谷歌的结果排除在外吧
-[UIWindow sendEvent:]和po $arg3的符号断点)现在来谈谈我是如何构造这个结构的,这是一种试图使模型从视图代码中完全删除的尝试。
重要的是我有这样的课程:

CarModel -纯数据CarModelDisplayClass --一个带有模型的类,它可以符合Displayable和Tappable。这是后面的BuilderClass将要处理的类,它基本上充当了模型和视图之间的桥梁。Displayable -使类返回一个视图,以便后面的BuilderClass附加到视图/屏幕Tappable - BuilderClass查看一致性,将一个点击手势附加到视图(从Displayable协议返回)Builder的工作方式如下:
在这一点上,除了UITapGestureRecognizer之外,一切都能工作。
CarModelDisplayClass到实际的views+gestures如下所示。
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 (如果这一点我不知道的话)。
任何指示都会有帮助。
我这里有真正的代码(虽然它有不同的名字)
发布于 2019-08-03 12:04:56
看起来,您必须在代码中的某个地方保留对可访问项的强烈引用,否则它们将从内存中删除。
基于附加链接中的代码-我将更改TLAStackviewBuilder类以返回UIScrollView,但其中包含对displayRows的引用。
在上面编写的代码中:
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
}
}
}
}https://stackoverflow.com/questions/57337556
复制相似问题