酢ろぐ!スマートフォン用の表示で見る酢ろぐ!カレーが嫌いなスマートフォンアプリプログラマのブログ。BoyPokémonContactAbout2011-07-17UIAlertViewを使って縦並びにボタンを配置したアラートを表示するiPhone「本当に○○を削除しますが、よろしいでしょうか?」や「このURLをお気に入りに追加しますか?」など、ユーザーとの対話にアラートを使用するアプリは結構あります。release];上記のコードを実行すると、このような表示になります。ボタンを追加するのはUX的に考えてあまりよろしくないですが、2つくらいなら許されると思います。ボタンをもう一つ追加してみましょう。サンプルコードをご覧下さい。対話の選択肢としてのボタンの数を増やしたい場合、otherButtonTitlesに文言を追加します。otherButtonTitlesは、可変長引数ですので引数の終わりを示す「nil」をきちんと付けてあげましょう。release];上記のコードを実行すると、このような表示になります。ボタンが縦表示になります。ボタンが(キャンセルボタンを含めて)2つまでの場合は横一列に並び、ボタンが3つを超えると縦に並ぶのが判ります。ボタンが2つでもボタンを縦表示したい(非公式APIを使う)ボタンが3つ以上の場合は、ボタンは縦に並びます。2つの場合でもボタンを縦並びに統一したいというのが人の心ではないでしょうか。UIAlertViewには、setNumberOfRowsメソッドという非公式APIを使う事で、簡単にボタンを縦並びに配置する事が可能です。release];上記のコードを実行すると、このような表示になります。これで対応が完了すれば良いのですが、前述したとおりsetNumberOfRowsメソッドは非公式APIでUndocumentなAPIです。するとAppStoreの審査に通らない可能性があるので、出来るだけお客様のいるプロジェクトでは使用出来ません。強引な手になりますが(むしろ正当かも?)、UIAlertViewクラスを継承してカスタマイズしたクラスを作ってしまいましょう。ボタンが2つでもボタンを縦表示したい(UIAlertViewをカスタマイズする)適当な名前のクラスを作ります。ボタンを縦並びにするので「TateAlertView」とでも名付けましょう。安直なクラス名で申し訳ないです。ヘッダは簡単にUIAlertViewを継承するだけにとどめておきます。{}@end実装もシンプルにしたつもりですが、コードがごちゃごちゃしてしまっています。これは単に僕のスキルが低いからです。setFrameメソッドでアラート自体の高さを定めます。次にSubviewの描画前等適切なタイミングでlayoutSubviewsメソッドが呼び出されます。ここでアラートのボタンを縦並びに配置しなおします。layoutSubviewsメソッドで、ボタンの配置を変更しているのですが、この際に並び変えに使用されるボタンのクラスは、UIButtonクラスではなくUIThreePartButtonクラスが使われています。UIThreePartButtonクラスのオブジェクトを発見する毎に、規定の位置から順番にボタンを並べていっています。dealloc];}@end上記のコードを実行すると、このような表示になります。それっぽい表示になったのではないかと思います。何が問題か?縦に3つボタンが並んだ場合、キャンセルボタンが一番下に来ているのが判りますでしょうか。ボタンを押下するとキャンセルボタンから順に0,1,2...とIndexが割り振られます。現状の実装だとsubviewsの配列に先に格納されている順に、アラートの上から配置してしまいます。subviewsの配列の先に格納された順に、アラートの下からボタンを配置していけば解決しそうです。}}上記のコードを実行すると、このような表示になります。これで「ボタンが2つの場合も縦並びにしたい」という要求には答えられたかなと思います。方向性を定めず、その時興味のあるネタを書いています。嫌いな食べ物はカレーです。Simulatorを単独で起動させる注目記事はてなブログをはじめよう!ch3cooh393さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。