选择器方法不调用
Selector method does not call
我只是 UIViewController
class:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var _ = Test(parentView: view)
}
}
和另一个 class:
import UIKit
class Test: NSObject {
let parentView: UIView
init(parentView: UIView) {
self.parentView = parentView
super.init()
addButton()
}
}
extension Test {
func addButton() {
let button = UIButton(type: .custom)
button.frame.size = CGSize(width: 100, height: 100)
button.addTarget(self, action: #selector(tap(_:)), for: .touchUpInside)
button.backgroundColor = UIColor.red
parentView.addSubview(button)
}
func tap(_ sender: UIButton) {
print("Tap")
}
}
Test
class 继承 NSObject
因为没有它我得到编译器按摩 Argument of '#selector' refers to instance method 'tap(sender:)' that is not exposed to Objective-C
.
问题是方法 tap(sender: UIButton)
没有调用。我不知道为什么。
(Swift 3, Xcode 8.2.1, appTarget: iOS 9.0)
编辑 1
我根据@vadian 的建议编辑了 Test
class 的实现,但它仍然不起作用。
编辑 2
当我将 Test
class 实施移动到 ViewController
时,一切正常,但我不想这样做。为什么这在单独的 class 中不起作用?
我已经测试了您的项目,问题出在这一行 var _ = Test(parentView: view)
,您正在其中创建自定义对象 class Test
。所以在 viewDidLoad
之后它的实例是 loss 或 deinit。这就是您没有收到带有按钮的操作调用的原因。
要解决此问题,请在 ViewController
class 中声明一个类型 Test
的实例 属性 并在 viewDidLoad
中初始化此 属性 .现在它会在您点击按钮时调用操作。
class ViewController: UIViewController {
var test: Test?
override func viewDidLoad() {
super.viewDidLoad()
self.test = Test(parentView: view)
}
}
我只是 UIViewController
class:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var _ = Test(parentView: view)
}
}
和另一个 class:
import UIKit
class Test: NSObject {
let parentView: UIView
init(parentView: UIView) {
self.parentView = parentView
super.init()
addButton()
}
}
extension Test {
func addButton() {
let button = UIButton(type: .custom)
button.frame.size = CGSize(width: 100, height: 100)
button.addTarget(self, action: #selector(tap(_:)), for: .touchUpInside)
button.backgroundColor = UIColor.red
parentView.addSubview(button)
}
func tap(_ sender: UIButton) {
print("Tap")
}
}
Test
class 继承 NSObject
因为没有它我得到编译器按摩 Argument of '#selector' refers to instance method 'tap(sender:)' that is not exposed to Objective-C
.
问题是方法 tap(sender: UIButton)
没有调用。我不知道为什么。
(Swift 3, Xcode 8.2.1, appTarget: iOS 9.0)
编辑 1
我根据@vadian 的建议编辑了 Test
class 的实现,但它仍然不起作用。
编辑 2
当我将 Test
class 实施移动到 ViewController
时,一切正常,但我不想这样做。为什么这在单独的 class 中不起作用?
我已经测试了您的项目,问题出在这一行 var _ = Test(parentView: view)
,您正在其中创建自定义对象 class Test
。所以在 viewDidLoad
之后它的实例是 loss 或 deinit。这就是您没有收到带有按钮的操作调用的原因。
要解决此问题,请在 ViewController
class 中声明一个类型 Test
的实例 属性 并在 viewDidLoad
中初始化此 属性 .现在它会在您点击按钮时调用操作。
class ViewController: UIViewController {
var test: Test?
override func viewDidLoad() {
super.viewDidLoad()
self.test = Test(parentView: view)
}
}