UIAlertViewのwill〜で始まるデリゲートに注意

以前にUIAlertViewのwillPresentAlertViewが予期せず呼ばれてしまうというエントリを書いた。
UIAlertViewの予期せぬwillPresentAlertView

この時の原因は(恐らく)CALayerのアニメーションが終わらないうちに他の処理が呼ばれた為に再度同メソッドが呼ばれることだったが、今回はUIAlertViewでが閉じる際に呼ばれるメソッドである。

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex;

両方ともUIAlertView上のどの(何番目の)ボタンがタップされたかがパラメタとして渡ってくるため同様の用途で使えそうなのだが、実際には天と地程に意味が違うので注意が必要だ。

リファレンスにもあるがdidDismissWithButtonIndexではUIAlertViewは既に閉じて(dismiss)いるが、willDismissWithButtonIndexはまだ閉じていないことに十分な注意が必要である。具体的にはUIAlertViewがまだ閉じていないうちに重い処理を行うとUIAlertViewの描画が崩れたりローテーションが上手く行かなかったりする。

UIAlertViewのようなビューはなんらかの確認か意思決定(YES|NO)をすることが目的なので、will〜を使う必要があるケースは少ないだろう。