从另一个类访问UI操作

时间:2018-03-04 16:17:41

标签: ios swift

我有一个"分享到Facebook"我的应用程序中的3个不同视图控制器按钮。所以我写了一个名为" ShareCentral"我想在这个课堂上做所有的分享操作。但是为了显示共享对话框,我需要将uiviewcontroller传递给我的ShareCentral类。我确实喜欢这样:

class ShareCentral {



    var UIVC: UIViewController


    init(vc:UIViewController) {
        self.UIVC = vc
    }

    func shareOnFacebook() {
        var content = LinkShareContent(url: URL(string:userProfileLink)!)
        do {
            try ShareDialog.show(from: UIVC, content: content)
        }catch (let error) {
            print(error)
        }
    }
}

这是我的视图控制器:

class SettingsViewController: UIViewController {

    let shareCentral = ShareCentral(vc: self)


    @IBAction func shareButtonClicked(_ sender: AnyObject) {
          self.shareCentral.shareOnFacebook()
    }
}

我收到以下编译错误:

SettingsViewController.swift:40:41: Cannot convert value of type '(SettingsViewController) -> () -> (SettingsViewController)' to expected argument type 'UIViewController'

我知道如果我将UIVC的类型更改为" SettingsViewController"问题就会消失。但正如我之前所说,我将在三个不同的视图控制器中使用此方法。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

请改为尝试:

class ShareCentral {
    unowned var UIVC: UIViewController

    init(vc:UIViewController) {
        self.UIVC = vc
    }

    func shareOnFacebook() {
        var content = LinkShareContent(url: URL(string:userProfileLink)!)
        do {
            try ShareDialog.show(from: UIVC, content: content)
        } catch (let error) {
            print(error)
        }
    }
}

class SettingsViewController: UIViewController {
    var shareVC: ShareVC!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.shareVC = ShareVC(vc: self)
    }

    @IBAction func shareButtonClicked(_ sender: AnyObject) {
          self.shareCentral.shareOnFacebook()
    }
}