UIActivityにBlockを追加するカテゴリを公開しました。

こんにちは、JAGA(@ja_gaimopotato)です。
iOS7がリリースされたので、公開しているアプリや開発中のアプリをiOS6やiOS7以上に対応していっているところです。
特にiOS6で公開された機能のうちiOS5では使えないものに関しては、今まで結構スルーしていたのでやっと導入しています。
UIActivityもその一つで、Blockを追加するカテゴリを作ったのでBlockActivityというレポジトリで、Githubに公開しました。

BlockActivity – Github

BlockActivityの機能

BlockActivityというサブクラスを用意しています。
ですが、このクラスを使わなくてもUIActicivityのサブクラスにカテゴリをインポートしていただくだけでも使えるようになっています。

機能はクラスメソッドでUIActivityのインスタンス生成して、performActivityメソッド内でBlockを実行します。

使い方

使い方は、簡単です。
例えば以下のような感じです。

初期化はこんな感じの実装になっています。

+(id)activityWithType:(NSString *)type
                title:(NSString *)title
                image:(UIImage *)image
          actionBlock:(void (^)())actionBlock{

    UIActivity *activity = [[self alloc]init];

    if (activity) {

        activity.activityType   = type;
        activity.activityTitle  = title;
        activity.activityImage  = image;
        activity.actionBlock    = actionBlock;

    }

    return activity;

}

UIActivityViewControllerを呼び出すときは、こんな感じです。

    -(void)showActivityView {

    BlockActivity *activity = [BlockActivity activityWithType:@"activity Type" title:@"activity Name" image:nil actionBlock:^{

            // ここにアクションを実装
        // performActivity内で呼ばれる。
    }];

    UIActivityViewController *vc = [[UIActivityViewController alloc]initWithActivityItems:@[@"test"] applicationActivities:@[activity]];
    [self presentViewController:vc animated:YES completion:nil];

}

UIActivityのボタンをタップすると通常は、performActivityが呼ばれます。
サブクラスの場合は、これをオーバーライドして独自のアクションを実装します。

BlockActivityでも、同様です。
ですがカテゴリで先にコードを仕込んでいて、サブクラスでperformActivityをオーバーライドしていない場合でもBlockが実行されるようになっています。

仮にperformActivityをサブクラスでオーバーライドした場合は、サブクラスものが優先されます。
そうする場合は好きなタイミングでactionBlock()を呼んでください。

こんな感じです。

    -(void)performActivity{

    // ここで実行する  
            self.actionBlock();

    [self activityDidFinish:YES];

}

他にもちょっと便利にしているところがあります。

  • 初期化時にアイコンデータがなくても呼び出せるように、自動的にサイズの無い画像を作るようにしています。

IOSシミュレータのスクリーンショット 2013 10 05 20 16 10

  • activityTypeとactivityTitleとactivityImageをそれぞれプロパティでアクセスできるようにしています。(結局サブクラスでも独自で返す値を実装するので問題ないと判断していますが、いかがでしょう?)

と、ここまで紹介させていただいたBlockActivityですが気に入っていただけると嬉しいです。
またお役に立てそうなものができましたら公開します。

これからも更新を続けていきますので、Feedlyへの登録をお願いします!

follow us in feedly

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です