[如何在没有UIViewController或任何建议的情况下实现共享按钮?在Swift 4

问题描述 投票:-2回答:3

我尚未实现该UIViewController,因为我已经继承了另一个类。并给出了错误,该错误不是该类的成员

func shareAppLink() {

        let name = "http://aijaz.com"
        let items = [name] as [Any]
        let ac = UIActivityViewController(activityItems: items, applicationActivities: nil)
         present(ac, animated: true)

    }
swift swift3
3个回答
0
投票

[present(_:animated:completion:)UIViewController的方法,因此必须在某些类型的UIViewController上调用它。

如果您的类最初是由视图控制器创建的,则可以尝试使用delegation pattern传递引用:

委托是一种简单而强大的模式,其中一个对象程序代表另一个对象或与另一个对象协同工作。委托对象保留对另一个对象的引用-委托-并在适当的时间向其发送消息。的消息通知事件的委托者委托对象是即将处理或刚刚处理。

如果您为自定义类创建了协议,如下所示:

protocol MyClassDelegate {
    func shareAppLink()
}

然后,您可以在View Controller中遵守该协议,并以如下方式调用该方法:delegate.shareAppLink()


0
投票

您还可以使用Respoder Chain获取视图的父视图控制器

extension UIView {
    var parentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

并像]那样声明您的shareAppLink函数>

func shareAppLink(sender : UIView) {
    let name = "http://aijaz.com"
    let items = [name] as [Any]
    let ac = UIActivityViewController(activityItems: items, applicationActivities: nil)
    sender.parentViewController(ac, animated: true)
}

然后在didSelectRowAt中,您可以将其称为:

self.shareAppLink(sender : cell)

0
投票

您必须继承UIViewController子类或UIViewController类。这样可以解决错误。

© www.soinside.com 2019 - 2024. All rights reserved.