Làm cách nào để hiển thị trang hành động chia sẻ iOS 6 mặc định với các tùy chọn chia sẻ có sẵn?


97

Một số ứng dụng hiển thị trang hành động mặc định trong iOS 6 với các tùy chọn chia sẻ.

Khung xã hội chỉ có hai lớp, một lớp dành cho sáng tác và một lớp dành cho yêu cầu.

Những gì tôi tìm thấy mặc dù là về việc soạn thảo cho một dịch vụ cụ thể với SLComposeViewController và trước khi hiển thị điều này, tôi phải truy vấn bằng tay nếu dịch vụ có sẵn. Và sau đó tôi cũng phải tạo bảng hành động của riêng mình với các biểu tượng riêng.

Làm cách nào để các ứng dụng đó hiển thị trang hành động tùy chọn chia sẻ mặc định này trong iOS 6? Hay họ đang sử dụng một khuôn khổ mã nguồn mở?


Tôi muốn mở trang chia sẻ với biểu tượng tùy chỉnh như wechat, weibo, qq và tích hợp chức năng của nó, làm cách nào để thực hiện điều này?
Ravi Ojha

Chỉ cần kiểm tra liên kết này cũng được .. stackoverflow.com/a/35267035/3908884
Gặp Doshi

Câu trả lời:


223

Các UIActivityViewController đã nêu trong câu trả lời khác làm cho tầm thường này. Tất cả những gì bạn phải làm là chỉ định văn bản / hình ảnh / URL mà bạn muốn chia sẻ và hiển thị bộ điều khiển chế độ xem hoạt động theo phương thức và iOS sẽ tự động hiển thị tất cả các dịch vụ chia sẻ hiện hành. Ví dụ:

Objective-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];
}

Nhanh

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
Chỉnh sửa tốt cho phiên bản Swift. Tôi muốn thay đổi .append (item) cho một + = item. Trông nhanh nhẹn hơn
Ignacio Inglese

2
Trong phiên bản mới nhất của Swift, thay thế AnyObject[]()với[AnyObject]()
Ruben Martinez Jr.

5
Nó hoạt động, chỉ sau khi đăng nhập vào các tài khoản tương ứng trong cài đặt (facebook / twitter), Nhưng trong ứng dụng ảnh / ứng dụng Ghi chú, các tùy chọn có sẵn ngay cả khi người dùng không đăng nhập, bạn có thể giải thích tại sao lại như vậy không? Hoặc có một số cách giải quyết khác?
Jaldip Katre

4
Tôi đã thêm một chỉnh sửa cho hỗ trợ iOS 8 trên iPad - bạn cũng cần phải định cấu hình UIActivityViewControllercủa UIPopoverControllernó nếu không nó sẽ gặp sự cố present…. Cho đến nay, tôi đã có hai lần bị từ chối từ ba lần chỉnh sửa, vì vậy, giả sử nó bị từ chối, có lẽ bạn có thể xem liệu bạn có muốn tự thêm bản chỉnh sửa hay không. Hoặc không :-)
Benjohn

Ồ, bản chỉnh sửa trích dẫn câu trả lời này giải thích tất cả.
Benjohn

39

Thêm cái này để sử dụng 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
Câu trả lời ưa thích cho tôi vì bạn cũng hiển thị loại trừ.
José
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.