こんにちは。haranicleです。
この前の#yhiosでBlocksKitつかってるひとーって聞いてみたら、10人中2人だけで驚きました。
みんな、どうやってUIAlertViewのコード書いてるんだろう。

BlocksKit

UIAlertViewのボタン押下時の処理を普通に書くと、このデリゲートで

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

alertViewのタグからどのalertなのかを判定して、clickedButtonAtIndexでどのボタンが押されたのかを判定して..と吐きそうになるぐらいif文を書かないといけないけど、BlocksKitならこんな感じで書けます。

UIAlertView *alert = [UIAlertView bk_alertViewWithTitle:@"タイトル" message:@"メッセージ"];
// ボタンを追加する。
[alert bk_addButtonWithTitle:@"ボタンタイトル" handler:^() {
     NSLog(@"ボタン押された!");
 }];
[alert show];

UIAlertの初期化と、ボタン押下時の処理がまとめて書けるのでソースコードの可読性が上がっていい感じ。

BlocksKitの残念ポイントは以下の2点

  • (1)arm64でビルドしようとするとエラーになる
  • (2)libffiに依存している

(1)に関しては↓の方法でどうにかなります。
iPhone5S(arm64)でBlocksKitが使えるようになってた – あおみかんのブログ

(2)はどうにもならないので、BlocksKitに似た、SHUIKitBlocksというものを使って解決します。

SHUIKitBlocks

seivan/SHUIKitBlocks · GitHub

BlocksKitとほぼ同じ使い方ができて、依存ライブラリもないし、テストコードもあるので安心して使える!

SHUIKitBlocksの導入

pod 'SHUIKitBlocks' #for iOS 7
pod 'SHUIKitBlocks', '~> 1.6.0' # for iOS 6

SHUIKitBlocksの使い方

UIAlertViewはこんな感じ。BlocksKitとほとんど同じ。

UIAlertView *alert = [UIAlertView SH_alertViewWithTitle:@"タイトル" withMessage:@"メッセージ"];
// ボタンを追加する。
[alert SH_addButtonWithTitle:@"ボタンタイトル"
 withBlock:^(NSInteger theButtonIndex) {
     NSLog(@"ボタン押された!");
 }];
[alert show];

いろいろ説明しようと思ったけど、ここに全部書いてるよ!
seivan/SHUIKitBlocks · GitHub

宣伝

新しいアプリをリリースしました。
履歴画面の削除ボタンを押下した後の処理(アラート表示、アラートのボタン押下時の処理)にSHUIKitBlocksを使っています。
よかったら触ってみてください。
QRコードリーダー