【问题标题】:Swift addTarget to a button and call function in different View Controller file from UIview fileSwift addTarget 到按钮并从 UIview 文件调用不同 View Controller 文件中的函数
【发布时间】:2021-10-05 15:07:29
【问题描述】:

现在我练习在我的 Swift 项目中应用 MVC 模式。 我有一个 View Controller (VC) 文件和一个 UIView 文件。

在 VC 文件中,我添加了 UIView 文件,如下所示。

class MyViewController: UIViewController {
    private var myView = MyView()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(myView)
        myView.frame = CGRect(origin: .zero, size: view.bounds.size)
        // and other codes...
    }

    @objc func showDeleteAlert() {
        print("showDelete is pressed")
    }
}

然后,在 UIView 文件中,我添加了一些视图和按钮(我只是复制了按钮部分)。

class MyView: UIView {
    lazy var deleteButton: UIButton = {
        let button = UIButton()
        button.setTitle("delete", for: .normal)
        button.addTarget(target: MyViewController, action: #selector(showDeleteAlert), for: UIControl.Event.touchUpInside) // -> I get error in here saying "Cannot find 'showDeleteAlert' in scope"

        return button
    }()

// and more codes...
}

我这里要做的是如何在deleteButton被按下时将target设置为showDeleteAlert函数?

我看到教程添加了“self”作为目标参数,但在我的例子中,我将视图和控制器分开,所以不确定如何访问 MyViewController 中的函数。

谢谢...

【问题讨论】:

  • 一个简单的解决方法是使用通知。
  • 它应该是以下性质的东西。 button.addTarget(self.MyViewController, action: #selector(self.MyViewController.showDeleteAlert), for: .touchUpInside)

标签: ios swift xcode button addtarget


【解决方案1】:

这里有两个选择:

  1. 将addTarget 移动到视图控制器viewDidLoad:
myView.deleteButton.addTarget(self, action: #selector(showDeleteAlert), for: UIControl.Event.touchUpInside)
  1. 如果您想将按钮设为私有(这是一个很好的做法),您可以将代理功能添加到您的MyView
func addDeleteButtonTarget(_ target: Any?, action: Selector) {
    deleteButton.addTarget(target, action: action, for: .touchUpInside)
}

并称它为:

myView.addDeleteButtonTarget(self, action: #selector(showDeleteAlert))

无论如何,你不能调用button.addTarget(target: MyViewController, ...),因为你需要传递MyViewController的一个实例,而不仅仅是一个类名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多