সুইফটে ইউআইএসিএভিটিভিউউকন্ট্রোলারের সাথে পাঠ্য বা চিত্র ভাগ করার জন্য প্রাথমিক উদাহরণ


130

আমি কীভাবে আইওএস-এ অন্য অ্যাপ্লিকেশনগুলিতে ভাগ করতে পারি তা জানতে চেয়ে আমার সন্ধান শুরু করে। আমি আবিষ্কার করেছি যে দুটি গুরুত্বপূর্ণ উপায়

  • UIActivityViewController
  • UIDocumentInteractionController

এই এবং অন্যান্য পদ্ধতির সাথে এই এসও উত্তরের তুলনা করা হচ্ছে ।

প্রায়শই যখন আমি একটি নতুন ধারণা শিখি তখন আমার শুরু করার জন্য আমি একটি প্রাথমিক উদাহরণ দেখতে চাই। আমি কিছু বেসিক সেট আপ হয়ে গেলে আমি এটি পরে কীভাবে পছন্দ করব তা এটি সংশোধন করতে পারি।

এর সাথে সম্পর্কিত অনেকগুলি এসও প্রশ্ন রয়েছে UIActivityViewController, তবে আমি এমন কোনও সন্ধান পাইনি যা কেবল একটি সাধারণ উদাহরণ চেয়েছিল for যেহেতু আমি কীভাবে এটি করতে শিখেছি তাই নীচে আমার নিজের উত্তর সরবরাহ করব। একটি ভাল একটি (বা একটি উদ্দেশ্য-সি সংস্করণ) যুক্ত করতে নির্দ্বিধায়।

উত্তর:


278

ইউআইএসিটিভিটিভিউ কনট্রোলার উদাহরণ প্রকল্প

আপনার স্টোরিবোর্ডটি দুটি বোতামের সাহায্যে সেট আপ করুন এবং সেগুলি আপনার ভিউ কন্ট্রোলারের কাছে রাখুন (নীচের কোডটি দেখুন)।

এখানে চিত্র বর্ণনা লিখুন

আপনার সম্পদ.এক্সক্যাসেটগুলিতে একটি চিত্র যুক্ত করুন। আমি আমার "সিংহ" বলেছি।

এখানে চিত্র বর্ণনা লিখুন

কোড

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

}

ফলাফল

"কিছু পাঠ্য ভাগ করুন" এ ক্লিক করা বামদিকে ফলাফল দেয় এবং "একটি চিত্র ভাগ করুন" ক্লিক করে ডানদিকে ফলাফল দেয়।

এখানে চিত্র বর্ণনা লিখুন

মন্তব্য

  • আমি এটি আইওএস 11 এবং সুইফট 4 দিয়ে প্রকাশ করেছি I এটির কাজ শেষ হওয়ার আগে আমাকে সিমুলেটারে কয়েকবার চালাতে হয়েছিল কারণ এটির সময়সীমা শেষ। এটি হতে পারে কারণ আমার কম্পিউটারটি ধীর।
  • আপনি যদি এই পছন্দগুলির মধ্যে কিছুটি আড়াল করতে চান excludedActivityTypesতবে উপরের কোডটিতে প্রদর্শিত হিসাবে আপনি এটি করতে পারেন ।
  • ল্যাপটি অন্তর্ভুক্ত না popoverPresentationController?.sourceViewকরে কোনও আইপ্যাড চালানোর সময় আপনার অ্যাপ্লিকেশনটি ক্রাশ হয়ে যাবে।
  • এটি আপনাকে অন্য অ্যাপ্লিকেশনগুলিতে পাঠ্য বা চিত্র ভাগ করার অনুমতি দেয় না। আপনি সম্ভবত এটি UIDocumentInteractionControllerজন্য চান ।

আরো দেখুন


1
কিছু উদাহরণ কেন 1 আইটেমের অ্যারে এবং কিছু শো 2 দেখায়? ধরে নিচ্ছি একটি চিত্র ভাগ করে নেওয়া।
লিম থিয়ে চ্যান

@ সুরগাচ: হাই আমি পাঠ্যে একটি রেফারেল কোডটি ভাগ করতে চাই এবং সেই কোডটি ক্লিক করে অনুলিপি করা বা ট্যাপ করে ট্যাপ করতে হবে যখন আমরা কোনও নম্বর প্রেরণ করি তখন তা ঘটে।
ikaশিকা

73

ভাগ: পাঠ্য

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

ভাগ করুন: পাঠ্য - চিত্র - ইউআরএল

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

এখানে চিত্র বর্ণনা লিখুন


4
আরে এটা কাজ করছে না। এফবিতে কেবল লিঙ্কটি চিত্র এবং পাঠ্য না ভাগ করা হয়।
একতা পদলিয়া

@ScriptKitty। আই ক্লাউড অ্যাকাউন্টের সাথে কী বার্তাগুলি অ্যাপ্লিকেশনটি সঠিকভাবে কনফিগার করা হয়েছে?
আওইস ফায়ায

1
@EktaPadaliya। এফবি আপডেট নীতি অনুসারে, একটি URL বা একটি ছবি ভাগ করা যায়। পাঠ্যটি পারেন না
ফায়াজ


2
@ মিঃ জাভেদমুলতানি চিত্রটি হোয়াটসঅ্যাপে ভাগ করা হয়নি
নিককডার

10

আপনি পুরো স্ক্রিনটি ভাগ করতে চাইলে আমি নির্দোষভাবে কাজ করতে এটি পেয়েছি।

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

9

ঠিক যেমন নোট আপনি এটি আইপ্যাডগুলির জন্যও ব্যবহার করতে পারেন:

activityViewController.popoverPresentationController?.sourceView = sender

সুতরাং প্রেরক থেকে পপওভার পপস (সেই ক্ষেত্রে বোতাম)।


ক্রিয়াকলাপভিউকন্ট্রোলআরপোপারপ্রেমেশনেশন কন্ট্রোলার? .সোর্স ভিউ = প্রেরক হিসাবে? আমার জন্য ইউআইভিউ-ওয়ার্কড :) ধন্যবাদ
ব্রায়ান

আইপ্যাডগুলির জন্য শেয়ার বক্সটি আসেনি। এই আইপ্যাড ইস্যুগুলি আমি ঠিক করেছিলাম!
Asp আপলোড

3

আপনি নীচের ফাংশনগুলি ব্যবহার করতে পারেন যা আমি আমার প্রকল্পের একটি সহায়ক ক্লাসে লিখেছি।

শুধু কল

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

এবং এটি আইফোন এবং আইপ্যাড উভয়ের জন্যই কাজ করবে। যদি আপনি উত্সরেক্টের মাধ্যমে কোনও ভিউর সিজিআরেক্ট মান পাস করেন তবে এটি আইপ্যাডেও একটি ছোট তীর দেখায়।

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

পারফেক্ট কাজ! 👍🏻
রবীন্দ্র_ভাটি

3

আমি উপরের বাস্তবায়নটি ব্যবহার করেছি এবং ঠিক এখনই আমি জানতে পেরেছি যে এটি আইপ্যাড চলমান আইপ্যাডে কাজ করে না 13. কাজটি করার জন্য আমাকে এই লাইনগুলি উপস্থিত করার আগে () কল করতে হয়েছিল

//avoiding to crash on iPad
if let popoverController = activityViewController.popoverPresentationController {
     popoverController.sourceRect = CGRect(x: UIScreen.main.bounds.width / 2, y: UIScreen.main.bounds.height / 2, width: 0, height: 0)
     popoverController.sourceView = self.view
     popoverController.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
}

এটি আমার পক্ষে এভাবে কাজ করে

func shareData(_ dataToShare: [Any]){

        let activityViewController = UIActivityViewController(activityItems: dataToShare, applicationActivities: nil)

        //exclude some activity types from the list (optional)
        //activityViewController.excludedActivityTypes = [
            //UIActivity.ActivityType.postToFacebook
        //]

        //avoiding to crash on iPad
        if let popoverController = activityViewController.popoverPresentationController {
            popoverController.sourceRect = CGRect(x: UIScreen.main.bounds.width / 2, y: UIScreen.main.bounds.height / 2, width: 0, height: 0)
            popoverController.sourceView = self.view
            popoverController.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
        }

        self.present(activityViewController, animated: true, completion: nil)
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.