gpt4 book ai didi

ios - 选择器方法不调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:54:46 25 4
gpt4 key购买 nike

我只有 UIViewController 类:

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

var _ = Test(parentView: view)
}
}

和另一个类:

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 类继承 NSObject 因为没有它我得到编译器消息 '#selector' 的参数指的是实例方法 'tap(sender:)' 即不暴露于 Objective-C

问题是 tap(sender: UIButton) 方法没有调用。我不知道为什么。

( swift 3,Xcode 8.2.1,appTarget:iOS 9.0)

编辑 1

我根据@vadian 的建议编辑了 Test 类的实现,但它仍然不起作用。

编辑2

当我将 Test 类实现移动到 ViewController 时,一切正常,但我不想这样做。为什么这不适用于单独的类(class)?

最佳答案

我已经测试了您的项目,问题出在这一行 var _ = Test(parentView: view),您正在创建自定义类 Test 的对象。所以在 viewDidLoad 之后,它的实例丢失或 deinit。这就是您没有收到带有按钮的操作调用的原因。

要解决此问题,请在您的 ViewController 类中声明一个类型为 Test 的实例属性,并在 viewDidLoad 中初始化该属性。现在它会在您点击按钮时调用操作。

class ViewController: UIViewController {

var test: Test?

override func viewDidLoad() {
super.viewDidLoad()

self.test = Test(parentView: view)
}
}

关于ios - 选择器方法不调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42156030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com