从另一个类访问UI操作

问题描述 投票:0回答:1

我在3个不同的视图控制器的应用程序中有一个“在Facebook上分享”按钮。所以我写了一个名为“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”,问题就会消失。但正如我之前所说,我将在三个不同的视图控制器中使用此方法。

我该如何解决这个问题?

ios swift
1个回答
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()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.