【发布时间】:2018-06-02 04:25:31
【问题描述】:
我有一个简单的视图 V 和视图控制器 C。控制器调用一个单独的类 X,它构建一个 webview 和一个用于关闭 webview 的按钮。
我实例化类 X(引用视图 V)然后调用一个方法来附加两个项目(webview 和项目)。
当我调用按钮 addTarget 方法时,它不起作用。我希望它执行 X 类的 closeAll 方法,而不是 C 控制器的 closeAll 方法。
我已经尝试了数百种变体。
这是 C 控制器中的(部分)代码:
let parentView:UIView
...
@objc func closeAll() {
print("Close webview, object")
}
这在 X 类中:
...
let transparentButton = UIButton(frame: frame)
transparentButton.backgroundColor = UIColor.black.withAlphaComponent(self.overlayTransparency)
transparentButton.setTitle("", for: .normal)
transparentButton.alpha = 0.5
transparentButton.isUserInteractionEnabled = true
transparentButton.addTarget(self, action:#selector("closeAll"), for: .touchUpInside)
parentView.addSubview(transparentButton)
我的 C 控制器中有这个,它在点击时被调用:
@objc func closeAll() {
print("Close webview, main")
}
【问题讨论】:
-
不清楚上面的代码在哪里运行,但是您需要将
X的实例作为目标传递并且您的选择器语法不正确(它不是字符串):transparentButton.addTarget(instanceOfX, action:#selector(X.closeAll), for: .touchUpInside) -
感谢您的回答。我尝试了 transparentButton.addTarget(self, action:#selector(X.closeAll), for: .touchUpInside) 没有成功。 C.closeAll 仍在被调用。
-
您是否将 X 的实例分配给 C 的属性?
-
不,我没有。实际上 X 是一个小框架的一部分,我希望类的实现和使用尽可能简单。
标签: ios swift uiview uibutton addtarget