Основной пример для совместного использования текста или изображения с UIActivityViewController в Swift



Я начал свой поиск, желая знать, как я могу поделиться с другими приложениями в iOS. Я обнаружил, что два важных направления




  • UIActivityViewController

  • UIDocumentInteractionController


эти и другие методы сравниваются в это так ответ.



часто, когда я изучаю новую концепцию, мне нравится видеть основной пример, чтобы начать работу. Как только я получу что-то основное, я могу изменить его, как мне нравится позже.



есть многие так вопросы, связанные с UIActivityViewController, но я не мог найти ни одного, который просто просил простой пример. Поскольку я только что узнал, как это сделать, я дам свой собственный ответ ниже. Не стесняйтесь добавлять лучший (или версию Objective-C).

543   5  

5 ответов:

UIActivityViewController Пример Проекта

установите раскадровку с двумя кнопками и подключите их к контроллеру вида (см. код ниже).

enter image description here

добавить изображение к вашим активам.xcassets. Я назвал свой "Лев".

enter image description here

код

import UIKit
class ViewController: UIViewController {

    // share text
    @IBAction func shareTextButton(_ sender: UIButton) {

        // text to share
        let text = "This is some text that I want to share."

        // set up activity view controller
        let textToShare = [ text ]
        let activityViewController = UIActivityViewController(activityItems: textToShare, applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash

        // exclude some activity types from the list (optional)
        activityViewController.excludedActivityTypes = [ UIActivityType.airDrop, UIActivityType.postToFacebook ]

        // present the view controller
        self.present(activityViewController, animated: true, completion: nil)

    }

    // share image
    @IBAction func shareImageButton(_ sender: UIButton) {

        // image to share
        let image = UIImage(named: "Image")

        // set up activity view controller
        let imageToShare = [ image! ]
        let activityViewController = UIActivityViewController(activityItems: imageToShare, applicationActivities: nil)
        activityViewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash

        // exclude some activity types from the list (optional)
        activityViewController.excludedActivityTypes = [ UIActivityType.airDrop, UIActivityType.postToFacebook ]

        // present the view controller
        self.present(activityViewController, animated: true, completion: nil)
    }

}

результат

щелчок "поделиться некоторым текстом" дает результат слева, а щелчок "поделиться изображением" дает результат справа.

enter image description here

Примечания

  • я повторно протестировал это с iOS 11 и Swift 4. Мне пришлось запустить его пару раз в симуляторе, прежде чем он сработал, потому что это был тайм-аут. Это может быть потому, что мой компьютер работает медленно.
  • если вы хотите, чтобы скрыть некоторые из этих вариантов, вы можете сделать это с excludedActivityTypes как показано в коде выше.
  • не включая popoverPresentationController?.sourceView line приведет к сбою вашего приложения при запуске на iPad.
  • это не позволяет обмениваться текстом или изображениями с другими приложениями. Вы, наверное, хотите UIDocumentInteractionController для этого.

см. также

поделиться : текст

@IBAction func shareOnlyText(_ sender: UIButton) {
    let text = "This is the text....."
    let textShare = [ text ]
    let activityViewController = UIActivityViewController(activityItems: textShare , applicationActivities: nil)
    activityViewController.popoverPresentationController?.sourceView = self.view 
    self.present(activityViewController, animated: true, completion: nil)
}
}

поделиться : изображения

@IBAction func shareOnlyImage(_ sender: UIButton) {
    let image = UIImage(named: "Product")
    let imageShare = [ image! ]
    let activityViewController = UIActivityViewController(activityItems: imageShare , applicationActivities: nil)
    activityViewController.popoverPresentationController?.sourceView = self.view 
    self.present(activityViewController, animated: true, completion: nil)
 }

поделиться : текст-изображение-URL

   @IBAction func shareAll(_ sender: UIButton) {
    let text = "This is the text...."
    let image = UIImage(named: "Product")
    let myWebsite = NSURL(string:"https://stackoverflow.com/users/4600136/mr-javed-multani?tab=profile")
    let shareAll= [text , image! , myWebsite]
    let activityViewController = UIActivityViewController(activityItems: shareAll, applicationActivities: nil)
    activityViewController.popoverPresentationController?.sourceView = self.view 
    self.present(activityViewController, animated: true, completion: nil)
   }

enter image description here

Так же, как Примечание, Вы можете также использовать это для iPad:

activityViewController.popoverPresentationController?.sourceView = sender

Так поповер выскакивает из отправителя (кнопка в этом случае).

Я обнаружил, что это работает безупречно, если вы хотите поделиться весь экран.

@IBAction func shareButton(_ sender: Any) {

    let bounds = UIScreen.main.bounds
    UIGraphicsBeginImageContextWithOptions(bounds.size, true, 0.0)
    self.view.drawHierarchy(in: bounds, afterScreenUpdates: false)
    let img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    let activityViewController = UIActivityViewController(activityItems: [img!], applicationActivities: nil)
    activityViewController.popoverPresentationController?.sourceView = self.view
    self.present(activityViewController, animated: true, completion: nil)
}

вы можете использовать следующие функции, которые я написал в одном из моих вспомогательных классов в проекте.

просто позвони

showShareActivity(msg:"message", image: nil, url: nil, sourceRect: nil) 

и он будет работать как для iPhone, так и для iPad. Если вы передадите значение CGRect любого представления sourceRect, он также покажет небольшую стрелку в iPad.

func topViewController()-> UIViewController{
    var topViewController:UIViewController = UIApplication.shared.keyWindow!.rootViewController!

    while ((topViewController.presentedViewController) != nil) {
        topViewController = topViewController.presentedViewController!;
    }

    return topViewController
}

func showShareActivity(msg:String?, image:UIImage?, url:String?, sourceRect:CGRect?){
    var objectsToShare = [AnyObject]()

    if let url = url {
        objectsToShare = [url as AnyObject]
    }

    if let image = image {
        objectsToShare = [image as AnyObject]
    }

    if let msg = msg {
        objectsToShare = [msg as AnyObject]
    }

    let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
    activityVC.modalPresentationStyle = .popover
    activityVC.popoverPresentationController?.sourceView = topViewController().view
    if let sourceRect = sourceRect {
        activityVC.popoverPresentationController?.sourceRect = sourceRect
    }

    topViewController().present(activityVC, animated: true, completion: nil)
}

Comments

    Ничего не найдено.