Swift UIActivityViewController

Eri*_*Hua 1 safari ios uiactivityviewcontroller swift

谁能告诉我如何在 UIActivityViewController 中实现“在 Safari 中打开”?我知道这个问题是很久以前发布的另一个问题的重复,当时的方法是使用不再使用的框架。

我共享的数据是一个 URL。我已经有一个完全可用的 ActivityVC,我只需要添加“在 safari 中打开”按钮。

非常感谢。

代码:

@IBAction func shareButtonPressed(_ sender: UIButton) {
    let activityVC = UIActivityViewController(activityItems: [URL(string: urlStr)!], applicationActivities: nil)
    activityVC.popoverPresentationController?.sourceView = self.view
    self.present(activityVC, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*rin 7

您需要实现自己的活动,请查看下面的代码。

import UIKit

final class SafariActivity: UIActivity {
    var url: URL?

    override var activityImage: UIImage? {
        return UIImage(named: "SafariActivity")!
    }

    override var activityTitle: String? {
        return NSLocalizedString("Open in Safari", comment:"")
    }

    override func canPerform(withActivityItems activityItems: [Any]) -> Bool {
        for item in activityItems {
            if
                let url = item as? URL,
                UIApplication.shared.canOpenURL(url)
            {
                return true
            }
        }
        return false
    }

    override func prepare(withActivityItems activityItems: [Any]) {
        for item in activityItems {
            if
                let url = item as? URL,
                UIApplication.shared.canOpenURL(url)
            {
                self.url = url
            }
        }
    }

    override func perform() {
        var completed = false

        if let url = self.url {
            completed = UIApplication.shared.openURL(url)
        }

        activityDidFinish(completed)
    }
}

let url = URL(string: "http://www.apple.com")!

let activityViewController = UIActivityViewController(activityItems: [url], applicationActivities: [SafariActivity()])
present(activityViewController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)