class - 我怎样才能调用这个函数?

标签 class swift viewcontroller

我现在被困住了,我已经尝试了一切对我来说合乎逻辑的方法来完成这项工作,但没有运气......

我在一个单独的 swift 文件中得到了这个:

导入基金会 导入 UIKit

class MyViewController: UIViewController {

    func background() {
        var imageView : UIImageView
        imageView  = UIImageView(frame:CGRectMake(0, 0, 100, 300));
        imageView.image = UIImage(named:"bg.jpg")
        self.view.addSubview(imageView)
    }
}

我想将它调用到一个单独的 View Controller 文件中。我这样做的原因是因为这样我就可以在我所有的 View Controller 中调用后台类,而不必在每个 View Controller 中都执行相同的代码。

我尝试过的调用方式是:

MyViewController.background() - 我收到错误 Missing parameter for #1 in call

background() - 我收到错误 Use of unresolved identifier 'background'

MyViewController() - 我没有收到错误,但什么也没发生。

如果有人能告诉我如何将此函数调用到 View Controller 中的“ViewDidLoad”部分,我将不胜感激。

谢谢。

最佳答案

你找错人了。即使您可以在 MyViewController 中调用 background 方法,这仍然无法完成您想要完成的工作,因为当您在“单独的 View Controller 文件”中调用 background 时,background 方法中的 self 将是 other View Controller - 因此您会将 UIImageView 放入 other View Controller 的 View ,而不是this View Controller 的 View 。如果您希望能够在每个 View Controller 中分别执行相同的操作,则需要使 background 方法在每个 View Controller 的内部可用。

做到这一点的方法是通过扩展background 注入(inject) UIViewController 本身,您的所有 View Controller 都继承自该扩展:

extension UIViewController {
    func background() {
        var imageView = UIImageView(frame:CGRectMake(0, 0, 100, 300))
        imageView.image = UIImage(named:"bg.jpg")
        self.view.addSubview(imageView)
    }
}

现在,您应用中的任何 View Controller 只需说self.background()(或简单地background())即可调用此方法.

关于class - 我怎样才能调用这个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29395862/

相关文章:

python - 实现特定于类的方法但不直接使用属性的最佳方式

MySQL 的 c# 包装器类,在方法之间共享 "MySqlConnection()"对象是个好主意吗?

c++ - 在 Swift 项目中使用 OpenCV 时无法构建模块 'opencv2'

ios - 通过单击按钮切换 View Controller 会导致以 NSException 类型的未捕获异常终止

ios - 如何从 iOS 中的另一个类调用 View Controller 方法?

C++ 子类构造函数

python - 有没有办法在创建类(不是实例)时调用(静态)方法?

ios - [iOS Swift 4]如何支持 View Controller (模态和推送)

performance - Swift 编译器性能

ios - Swift 自定义 updateUI() 函数在 viewDidLoad 上不起作用