とり研

iPhoneアプリ開発とかプログラミングとかの話題。

データをメールしたりtwitterやfacebookに送れたりする、UIActivityViewControllerの使い方

iOS6から使えるようになった、下記のようなController。勉強会にて「超便利です」と教えてもらったので、使い方をメモ書き。

    // 対象のitemをArrayに入れる
    NSString* testString = @"test string";
    UIImage* image = [UIImage imageNamed:@"hogehoge.jpg"];
    NSURL* url = [NSURL URLWithString:@"http://d.hatena.ne.jp/tototti+dev/"];
    NSArray *activityItems = @[testString, image, url];
    
    // UIActivityViewController
    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems
                                                                                     applicationActivities:nil];
    
    // 機能ボタン表示を無効にする
    NSArray *excludedActivityTypes = @[UIActivityTypePrint];    // 印刷ボタンが表示されなくなる
    activityController.excludedActivityTypes = excludedActivityTypes;

    // completionHandler 完了時の動作
    void (^completionHandler)(NSString *activityType, BOOL completed) = ^(NSString *activityType, BOOL completed){
        // メール送信などの動作が完了した時に呼ばれる
        NSLog(@"completetion handler");
    };
    activityController.completionHandler = completionHandler;
    
    // modalで表示
    [self presentViewController:activityController animated:YES completion:^{
        // UIActivityViewControllerが表示された時に呼ばれる
        NSLog(@"presentViewController completion");
    }];

標準で用意されているボタン以外に、任意のアプリに対して動作するボタンも作れるらしいのだけど、そのやり方はもうちょっと調べないと・・・。