34

最近、UIActivity を使用して自分のアプリを世界に共有し始めましたが、問題はほとんどありません。まず、メールの件名の設定方法がわかりませんでした。何か方法はありますか?次に、メールの本文テキストを設定すると、余分な「入力」があります (メールの最初の行は空白で、テキストは 2 行目から始まります)。コードは次のとおりです。

 NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: @"Test", nil];

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

また、電子メールでは、次のことが示されています。

"

テスト "

3 番目: どの共有方法が選択されているかを知る方法はありますか? ユーザーが Twitter で共有するときに投稿にハッシュタグを含めたいのですが、今ではメールにも統合されているため、明らかに意味がありません。

ありがとう!

4

5 に答える 5

24

iOS7では、これは次を使用して可能です-

activityViewController:subjectForActivityType:

アイテムを投稿するとき、サービスは、電子メール メッセージなど、個別の件名フィールドとデータ フィールドを提供する場合があります。サブジェクト フィールドをサポートするサービスにサブジェクト フィールドを提供する場合は、このメソッドを実装します。

チェック - https://developer.apple.com/library/ios/documentation/uikit/reference/UIActivityItemSource_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIActivityItemSource/activityViewController:subjectForActivityType :

于 2013-10-08T15:12:40.477 に答える
16

1 と 2: iOS 6 で UIActivityViewController の受信者を設定するにはどうすればよいですか?

提供されている両方の方法、特に最初の方法は少しハックですが、可能です。

3: 異なるサービスで異なるコンテンツを共有することは可能ですが、アイテムの数とそのタイプは同じである必要があります (ただし、特定のサービスで必要のないアイテムについては nil を返すことができるため、これは実際には制限ではありません)。 )。UIActivityItemSource プロトコルを使用してサービスを選択した後、共有アイテムを作成する必要があります

私が使用するコード:

すべての項目のプロバイダーとして現在のコントローラーを使用して UIActivityViewController を表示します (.h ファイルに含まれている必要があります)。

const int numberOfSharedItems = 5;

- (IBAction)shareAction:(id)sender
{
    NSMutableArray *shareItems = [NSMutableArray new];
        while ([shareItems count] < numberOfSharedItems)
            [shareItems addObject: self];

        UIActivityViewController *shareController =
            [[UIActivityViewController alloc]
                // actual items are prepared by UIActivityItemSource protocol methods below
                initWithActivityItems: shareItems
                applicationActivities :nil];

        shareController.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll];

        [self presentViewController: shareController animated: YES completion: nil];
}

共有するアイテムのプレースホルダーを作成します。

-(id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
{
    static UIActivityViewController *shareController;
    static int itemNo;
    if (shareController == activityViewController && itemNo < numberOfSharedItems - 1)
        itemNo++;
    else {
        itemNo = 0;
        shareController = activityViewController;
    }

    switch (itemNo) {
        case 0: return @""; // intro in email
        case 1: return @""; // email text
        case 2: return [NSURL new]; // link
        case 3: return [UIImage new]; // picture
        case 4: return @""; // extra text (via in twitter, signature in email)
        default: return nil;
    }
}

サービスごとに異なる、共有される実際のアイテムを作成します。

-(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
    // the number of item to share
    static UIActivityViewController *shareController;
    static int itemNo;
    if (shareController == activityViewController && itemNo < numberOfSharedItems - 1)
        itemNo++;
    else {
        itemNo = 0;
        shareController = activityViewController;
    }

    NSString *shareText = [self shareText]; // whatever you fancy
    NSURL *shareURL = [self shareURL];

    // twitter
    if ([activityType isEqualToString: UIActivityTypePostToTwitter])
        switch (itemNo) {
            case 0: return nil;
            case 1: return shareText; // you can change text for twitter, I add $ to stock symbol inside shareText here, e.g. Hashtags can be added too
            case 2: return shareURL;
            case 3: return nil; // no picture
            case 4: return @"via @YourApp";
            default: return nil;
        }

    // email
    else if ([activityType isEqualToString: UIActivityTypeMail])
        switch (itemNo) {
            case 0: return @"Hi!\r\n\r\nI used YourApp\r\n";
            case 1: return shareText;
            case 2: return shareURL;
            case 3: return nil; // no picture
            case 4: return [@"\r\nCheck it out.\r\n\r\nCheers\r\n" stringByAppendingString: [self userName]];
            default: return nil;
        }

    else // Facebook or something else in the future
        switch (itemNo) {
            case 0: return nil;
            case 1: return shareText;
            case 2: return shareURL;
            case 3: return [self shareImage];
            case 4: return nil;
            default: return nil;
        }
}
于 2013-06-02T22:51:05.957 に答える