10

UIActivityViewController最後に、新しいクラスとプロトコルに関する Apple の (かなり陰気な) ドキュメントを調べUIActivityItemSourceて、アクティビティ ビューから呼び出されたさまざまなアクションにさまざまなデータ セットを送信しようとしています。物事を単純化するために、私は2つのことを見ています。

  1. 「これをチェックしてください!」という Facebook 投稿アクション。また、投稿に URL を添付します (かわいい小さなクリップで)。
  2. 「#ハッシュタグを付けてチェック!」という Twitter 投稿アクション。また、同じ URL を (同じペーパークリップで) 添付します。

これが私が今実装したコードです。

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {
        return @"Check this out!";
    } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) {
        return @"Check this out, with #hashtag!";
    }

    return @"";
}

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

そして、このアクティビティ ビュー コントローラー (同じクラスにあります) をセットアップすると、これが私が行うことになります。

UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil];
[self presentViewController:activityView animated:YES completion:nil];

私のジレンマは、そのオブジェクトをどのように取り付けるかです。NSURLiOS 6 SL クラスの投稿モーダルを呼び出すのは比較的簡単です。個々のメソッドを呼び出して URL または画像を添付するだけです。ここでこれを行うにはどうすればよいですか?

NSStringからオブジェクトを返すのではなく、オブジェクト-activityViewController:itemForActivityTypeだけを返すとNSURL、投稿に本文がなく、そのペーパークリップが表示されることに注意してください。これら 2 つの項目の配列を返すと、何も表示されません。

4

1 に答える 1

15

明らかに、それは次のように単純でした:UIActivityViewControllerの init 呼び出しの最初の引数に配列を渡し、配列内の各項目は、作成画面で最終的に異なるデータ型を処理します。selfがテキストを処理し、2 番目のオブジェクト ( NSURL) が URL を添付します。

NSArray *items = @[self, [NSURL URLWithString:@"http://this-is-a-url.com"]];
UIActivityViewController *activityView = [[UIActivityViewController alloc]  initWithActivityItems:items applicationActivities:nil];
[self presentViewController:activityView animated:YES completion:nil];

本当にこれについてもっとあるといいのですが、ここにあります。

于 2012-10-09T21:34:45.780 に答える