OSのバージョンによって変化するUIAlertViewの表示


iPhone SDKの機能の1つ「UIAlertView」は、iPhoneのOSのバージョンによって表示に違いが出る場合があります。


Touch Touch Shapes」で見てみると…(左:OS2.2 右:OS3.0)
 

「やり直す」のボタンの位置が違いますね。この部分の実装はどうなっているかというと

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"メニュー" message:nil
                     delegate:self
                     cancelButtonTitle:@"やり直す"
                     otherButtonTitles:@"タイトルへ", @"キャンセル", nil];

となっています。*1つまり

  • OS2.Xではキャンセルボタン、その他のボタンの順に表示される
  • OS3.0ではその他のボタン、キャンセルボタンの順に表示される

ということです。


この問題を解決するには「UIDevice」のプロパティに含まれるOSのバージョンを取得して処理の切り分けをする

NSString *ver = [UIDevice currentDevice].systemVersion;

//verの値に応じて処理の切り分けを行う
//if(...


もしくはキャンセルボタンを設定せず、全てその他のボタンに設定する。

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"メニュー" message:nil
                     delegate:self
                     cancelButtonTitle:nil
                     otherButtonTitles:@"やり直す", @"タイトルへ", @"キャンセル", nil];


上記どちらかの方法で解決できます。

*1:実際はローカライズの処理を行っています。