จะแสดงแผ่นปฏิบัติการแชร์ iOS 6 เริ่มต้นพร้อมตัวเลือกการแชร์ที่มีได้อย่างไร


97

แอพบางตัวแสดงเอกสารการดำเนินการเริ่มต้นใน iOS 6 พร้อมตัวเลือกการแชร์

Social Frameworkมีเพียงสองคลาสเท่านั้นสำหรับการเขียนและอีกคลาสสำหรับการร้องขอ

สิ่งที่ฉันพบคือเกี่ยวกับการเขียนสำหรับบริการเฉพาะด้วย SLComposeViewController และก่อนที่จะแสดงสิ่งนี้ฉันต้องสอบถามด้วยมือหากบริการนั้นพร้อมใช้งาน จากนั้นฉันก็ต้องสร้างแผ่นงานของตัวเองด้วยไอคอนของตัวเอง

แอพเหล่านั้นแสดงเอกสารการดำเนินการตัวเลือกการแชร์เริ่มต้นใน iOS 6 อย่างไร หรือพวกเขาใช้กรอบโอเพนซอร์ส?


ฉันต้องการเปิดแชร์ชีตด้วยไอคอนที่กำหนดเองเช่น wechat, weibo, qq และรวมฟังก์ชันการทำงานของมันฉันจะทำสิ่งนี้ได้อย่างไร?
Ravi Ojha

ตรวจสอบที่ลิงค์นี้ด้วย .. stackoverflow.com/a/35267035/3908884
พบกับ Doshi

คำตอบ:


223

UIActivityViewControllerที่ระบุไว้ในคำตอบอื่น ๆ ทำให้น่ารำคาญนี้ สิ่งที่คุณต้องทำคือระบุข้อความ / รูปภาพ / URL ที่คุณต้องการแชร์และนำเสนอตัวควบคุมมุมมองกิจกรรมแบบโมฆะและ iOS จะแสดงบริการแบ่งปันที่เกี่ยวข้องทั้งหมดโดยอัตโนมัติ ตัวอย่าง:

วัตถุประสงค์ -C

- (void)shareText:(NSString *)text andImage:(UIImage *)image andUrl:(URL *)url
{
    NSMutableArray *sharingItems = [NSMutableArray new];

    if (text) {
        [sharingItems addObject:text];
    }
    if (image) {
        [sharingItems addObject:image];
    }
    if (url) {
        [sharingItems addObject:url];
    }

    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];
    [self presentViewController:activityController animated:YES completion:nil];
}

รวดเร็ว

func share(sharingText: String?, sharingImage: UIImage?, sharingURL: URL?) {
    let sharingItems:[AnyObject?] = [
                                        sharingText as AnyObject,
                                        sharingImage as AnyObject,
                                        sharingURL as AnyObject
                                    ] 
    let activityViewController = UIActivityViewController(activityItems: sharingItems.compactMap({$0}), applicationActivities: nil)
    if UIDevice.current.userInterfaceIdiom == .pad {
        activityViewController.popoverPresentationController?.sourceView = view
    }
    present(activityViewController, animated: true, completion: nil)
}

6
การแก้ไขที่ดีสำหรับเวอร์ชัน Swift ฉันจะเปลี่ยน. append (item) สำหรับ a + = item ดูรวดเร็วมากขึ้น
Ignacio Inglese

2
ใน Swift เวอร์ชันล่าสุดให้แทนที่AnyObject[]()ด้วย[AnyObject]()
Ruben Martinez Jr.

5
มันใช้งานได้หลังจากลงชื่อเข้าใช้บัญชีที่เกี่ยวข้องในการตั้งค่า (facebook / twitter) แต่ในแอพรูปภาพ / แอพ Notes ตัวเลือกจะพร้อมใช้งานแม้ว่าผู้ใช้จะไม่ได้เข้าสู่ระบบคุณช่วยอธิบายได้ไหมว่าทำไมจึงเป็นเช่นนั้น หรือมีวิธีแก้ปัญหาอื่น ๆ ?
Jaldip Katre

4
ฉันได้เพิ่มแก้ไขสำหรับรองรับ iOS 8 บน iPad - การที่คุณต้องยังกำหนดค่าUIActivityViewController's หรือมันจะมีปัญหาในการUIPopoverController present…ฉันมีการปฏิเสธสองครั้งจากสามรายการในการแก้ไขจนถึงตอนนี้สมมติว่าถูกปฏิเสธบางทีคุณอาจเห็นว่าคุณต้องการเพิ่มการแก้ไขด้วยตัวเองหรือไม่ หรือไม่ :-)
Benjohn

โอ้การแก้ไขอ้างถึงคำตอบนี้ซึ่งอธิบายทั้งหมด
Benjohn

39

เพิ่มสิ่งนี้เพื่อใช้ไฟล์UIActivityViewController.

-(IBAction)shareButtonPressed:(id)sender {

    NSLog(@"shareButton pressed");

    NSString *texttoshare = _txt; //this is your text string to share
    UIImage *imagetoshare = _img; //this is your image to share
    NSArray *activityItems = @[texttoshare, imagetoshare];    
    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint];
    [self presentViewController:activityVC animated:TRUE completion:nil];
}

2
คำตอบที่ต้องการสำหรับฉันเนื่องจากคุณแสดงการยกเว้นด้วย
José
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.