[PR]
2024年11月21日
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
アラートを出す その2
2009年02月27日
前回の記事では、単純にOKボタンのみを表示するアラートを出しました。今回は2個目のボタンを付けて、どちらのボタンが押されたかで動作を変えられるようにする方法についてです。まず、2個目のボタンは、前回nilだったotherButtonTitlesにボタン用の文字列を追加すれば簡単に追加できます。以下に例を示します。
これはツールの設定をリセットする項目を選んだ時に実行するコードです。alertTypeというのはヘッダーで宣言したNSInteger型の変数で、これは別に他の名前でも構いません。同じビューコントローラから複数のアラートを表示するときの場合分けをするために作っています。これで表示されるアラートには、日本語環境でキャンセルとリセットという2個のボタンが表示されます。なお、otherButtonTitlesの引数カンマ区切りで列挙し最後にnilがきます。では次にボタンが押された時の動作を追加しましょう。そのためにはまず、このビューコントローラがアラートからのメッセージを受信するようにする必要があります。具体的にはまずヘッダーファイルの@Interface部分を変更します。
この<UIAlertViewDelegate>を追加しておく事で、ビューコントローラがアラート表示終了時のメッセージを受信できます。そこで次にメッセージを受信したときに実行される命令をメソッドファイルに追加します。
buttonIndexは一番左(3個以上ならボタンは縦配列になるので一番上)のボタンが0で順番に1増えます。上の例ではキャンセルが0でリセットが1です。キャンセルの場合は特に何もする必要がないので分岐を用意していません。リセットする場合はbuttonIndexが1になるのでそれを条件に分岐します。他のアラート(マクロの全削除の確認用などで出しているアラート)と区別するため、さらにalertTypeの値で分岐します。ここにリセットに必要なコードを記述します。別のアラートでもボタンによりアクションが必要なら、別のalertTypeの値を作っておいて分岐させれば良いでしょう。
2010年4月28日追記:
UIAlertViewはUIViewの派生クラスなのでメンバ変数でtagという値を持っています。それを使うことでも分岐を行わせることが出来ます。例えば上のアラートの表示設定でalert.tag = 1;としておき、分岐判定コードではalertTypeのかわりにactionSheet.tag==1などの条件にすれば同じような動作をさせられます。
alertType = 1;
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"Tiny3D",@"title")
message:NSLocalizedString(@"Reset all settings?",@"message")
delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel",@"")
otherButtonTitles:NSLocalizedString(@"Reset",@""),nil];
[alert show];
[alert release];
これはツールの設定をリセットする項目を選んだ時に実行するコードです。alertTypeというのはヘッダーで宣言したNSInteger型の変数で、これは別に他の名前でも構いません。同じビューコントローラから複数のアラートを表示するときの場合分けをするために作っています。これで表示されるアラートには、日本語環境でキャンセルとリセットという2個のボタンが表示されます。なお、otherButtonTitlesの引数カンマ区切りで列挙し最後にnilがきます。では次にボタンが押された時の動作を追加しましょう。そのためにはまず、このビューコントローラがアラートからのメッセージを受信するようにする必要があります。具体的にはまずヘッダーファイルの@Interface部分を変更します。
@interface SettingTableViewController : UITableViewController <UIAlertViewDelegate> {
- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(buttonIndex == 1) {
// 押されたのは2番目のボタンです。
if(alertType == 1){
// リセット用のアラートでリセットボタンが押されています。
// ここに具体的なリセット用のコードを書きます。
}
}
}
2010年4月28日追記:
UIAlertViewはUIViewの派生クラスなのでメンバ変数でtagという値を持っています。それを使うことでも分岐を行わせることが出来ます。例えば上のアラートの表示設定でalert.tag = 1;としておき、分岐判定コードではalertTypeのかわりにactionSheet.tag==1などの条件にすれば同じような動作をさせられます。
PR
Comment