19

情報を共有するために iOS 6 の新しい方法を使用していますUIActivityViewController。メディア (Facebook、Twitter、またはメール) に応じて共有データを選択するには、View Controller でUIActivityItemSourceプロトコルを次のように実装します。

- (IBAction)onShareButton:(UIButton *)sender
{

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil];

    activityViewController.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMessage, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeSaveToCameraRoll];
    [self presentViewController:activityViewController animated:YES completion:^{}];
}

#pragma mark - UIActivityItemSource Protocol

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {
        NSArray *items = @[@"message facebook", [NSURL URLWithString:@"http://www.myUrlFacebook.com"]];
        return items;
    } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) {
        NSArray *items = @[@"message twitter", [NSURL     URLWithString:@"http://www.myUrlTwitter.com"]];
        return items;
    } else if ([activityType isEqualToString:UIActivityTypeMail]) {
        NSArray *items = @[@"message mail", [NSURL URLWithString:@"http://www.myUrlMail.com"]];
        return items;
    }

        NSArray *items = @[@"Not a proper Activity", [NSURL URLWithString:@"http://www.myUrlMail.com"]];
    return items;
}

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"PlaceHolder";
}

文字列の単純な NSString を返すときactivityViewController:itemForActivityType:、 my でよく使用されますが、 !UIActivityViewControllerを使用する方法が見つかりません。Array

Apple Documentation によると、可能なはずです:

このメソッドは、アクティビティ オブジェクトによって処理される実際のデータ オブジェクトを返します。 Apple ドキュメント

誰かUIActivityItemSourceが配列でこのプロトコルを使用したことがありますか、またはそれを行うための完全なチュートリアルがありますか?

注:コンソールでもこの​​エラーが発生しました。役立つ場合があります...

Launch Services: 不明なアプリ識別子 com.apple.mobilemail の登録に失敗しました

Launch Services: アプリ識別子 com.apple.mobilemail が見つかりません

4

2 に答える 2

23

に準拠する単一のオブジェクトは、UIactivityItemSource単一のデータのみを返すことができます。activityViewControllerPlaceholderItem:NSArray

これは、頭文字の部分で2 つUIActivityItemSourceのを作成して渡すことで解決できます。各ソースはプレースホルダー値を渡すことができますが、何か空白を返すことができるため、アクティビティによってはその特定の種類のデータを実際に使用する必要はありません。activityItemsinitWithActivityItems:itemForActivityType

または、他の回答で言及されているクールな拡張機能を使用してください。

于 2012-12-10T04:25:06.543 に答える
16

NSArrayこれを理解するためにかなりの時間を費やした後、これを of アイテムに渡すことはできないようです。だから私はUIActivityViewControllerそれを可能にするために拡張しました。

RDActivityViewController

于 2012-11-07T18:30:43.007 に答える