iOS 6 の新しいアクションシート機能を UIActivityViewController で実装する

iOS 6 から Safari やカメラロールなどのアクションボタンをタップすると、タイル状に並んだアイコンから TwitterFacebook への共有機能などが呼び出せるようになりました。
下記のように、OS標準以外のアプリにもこの機能を簡単に追加できます。

このアクションシートの機能は UIActivityViewController に集約されているので、これを呼び出すだけです。ただ単純にコピペ実装できるエントリが見つからなかったので紹介しておきます。

上記のように、よくある Twitter, Facebook などにテキストとURLを投稿するときの方法です。

- (IBAction)actionButtonPressed:(id)sender
{
    NSString *ttl = @"Tosshi Note";
    NSURL *url = [NSURL URLWithString:@"http://d.hatena.ne.jp/tilfin/"];

    NSArray *activityItems = [NSArray arrayWithObjects:ttl, url, nil];
    UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:activityItems
                                                                  applicationActivities:nil];

    [self presentViewController:activityView animated:YES completion:^{
    }];
    
    [activityView release];
}

UIActivityViewController の initWithActivityItems:applicationActivities: メソッドを使って、activityItems には NSString と NSURL を NSArray にまとめて渡します。
applicationActivities には、独自のアクティビティ(機能)を渡すことでさらに追加できます。今回は、システムの標準に従って表示させるため、nil にしています。
表示させたくないアクティビティは、excludedActivityTypes プロパティに、以下の Built-in Activity Types 定数を使って NSArray でセットします。
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIActivity_Class/Reference/Reference.html *1

*1:Built-in Activity Types の項には、それぞれアクティビティの説明に activityItems に指定できるリソースが書かれています。