Swift UIActivityViewController - PullRequest
       16

Swift UIActivityViewController

0 голосов
/ 30 мая 2018

Может кто-нибудь сказать мне, как реализовать "Открыть в Safari" в UIActivityViewController?Я знаю, что эти вопросы являются дубликатами другого вопроса, опубликованного много лет назад, и метод в то время заключался в использовании структуры, которая больше не может использоваться.

Данные, которыми я делюсь, являются URL.У меня уже есть полностью работающий ActivityVC, и мне нужно только добавить эту кнопку «открыть в сафари».

Большое спасибо.

код:

@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)
}

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Попробуйте эту ссылку, если она соответствует вашим требованиям

Ссылка - https://bjartes.wordpress.com/2015/02/19/creating-custom-share-actions-in-ios-with-swift/

Требуется код

class FavoriteActivity: UIActivity {
    override func activityType() -> String? {
        return "TestActionss.Favorite"
    }

    override func activityTitle() -> String? {
        return "Add to Favorites"
    }

    override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool {
        NSLog("%@", __FUNCTION__)
        return true
    }

    override func prepareWithActivityItems(activityItems: [AnyObject]) {
        NSLog("%@", __FUNCTION__)
    }

    override func activityViewController() -> UIViewController? {
        NSLog("%@", __FUNCTION__)
        return nil
    }

    override func performActivity() {
        // Todo: handle action:
         NSLog("%@", __FUNCTION__)

        self.activityDidFinish(true)
    }

    override func activityImage() -> UIImage? {
        return UIImage(named: "favorites_action")
    }
}

Использование

@IBAction func showAvc(sender: UIButton) {
        let textToShare = "Look at this awesome website!"
        let myWebsite = NSURL(string: "http://www.google.com/")!

        let objectsToShare = [textToShare, myWebsite]
        let applicationActivities = [FavoriteActivity()]

        let avc = UIActivityViewController(activityItems: objectsToShare, applicationActivities: applicationActivities)

        self.presentViewController(avc, animated: true, completion: nil)
    }
0 голосов
/ 30 мая 2018

Вам необходимо заняться своими делами, проверьте код ниже.

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)
...