ダイアログの表示について記載していこうと思います。
今回もコンセプトとしては、storyboardを使わない方向で行きたいと思います。
iPhoneのダイアログはAndroidと比べってかっこいいダイアログなので、
カスタマイズしなくてもそのまま使えるのがいいですね。
個人的にはアプリを作成すると、
一番お世話になるのがダイアログです。
どういう時に、どう使うかというと
・強制的にユーザー操作を止めたい!!
・ユーザーにメッセージを送りたい!!
・ユーザーに選択肢を与えたい!!
おまけで、
・座標を気にしなくても画面の真ん中に表示される
まぁ、結構便利なんです。
はい。。。。。
一番下のは、作り手側の気持ちとして、
すごいありがたいことでして、
サンプルソースでは、直接座標をしている事が多いのですが、
やっぱり、作り手としては座標の決め打ちはちょっと怖いですよね。
まぁ、iPhoneならそこまで端末が多い訳ではないので、
そこまで気にしなくてもいいかもしれませんが。。。
導入部分はこのくらいにして、メインのダイアログの表示方法です。
//ダイアログの作成
oAlert = [[UIAlertView alloc] init];
oAlert.delegate = self;
//ダイアログのタイトルを設定
oAlert.title = @"テストのダイアログ";
//メッセージを設定
oAlert.message = @"ラベルを表示する";
//ボタンを追加
[oAlert addButtonWithTitle:@"はい"];
[oAlert addButtonWithTitle:@"いいえ"];
//ダイアログを表示する
[oAlert show];
他のUIと同じ感覚で、
生成して文字列設定しています。
addSubviewのかわりに
showを使っています。
こちらの処理ですが、細かい事は自分も
あまりよくわからないので、大変申し訳ないのですが、
処理内容を通知する関数をどこに作るかという設定だと思います。
ダイアログ押下時に呼ばれる関数を作ると
// ダイアログのボタンが押された時に呼ばれるデリゲート例文
-(void)alertView:(UIAlertView*)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex {
switch (buttonIndex) {
case 0:
//1番目のボタンが押されたときの処理を記述する
break;
case 1:
//2番目のボタンが押されたときの処理を記述する
break;
}
}
こんな、感じです。
ダイアログとボタンとラベルを使った簡単なサンプルソースを
作ったので、こちらで全体的な動きの確認を
■サンプルソース
h.ファイル
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController{
UILabel *oLabel;
UIAlertView *oAlert;
}
@end
m.ファイル
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
//ボタンの生成・ボタンタイプの指定
UIButton *oButton =[UIButton buttonWithType:UIButtonTypeRoundedRect];
//ボタン枠の作成
oButton.frame = CGRectMake(00.0f, 150.0f, 300.0f, 50.0f);
//普段のボタンタイトル
[oButton setTitle:@"ダイアログを表示する" forState:UIControlStateNormal];
//ボタン押下時のタイトル
[oButton setTitle:@"ボタン押下中!!" forState:UIControlStateHighlighted];
// ボタンがタッチダウンされた時にonPushメソッドを呼び出す
[oButton addTarget:self action:@selector(onPush::)forControlEvents:UIControlEventTouchDown];
//ボタンを画面に追加
[self.view addSubview:oButton];
//1番目のボタンが押されたときの処理を記述する
oLabel = [[UILabel alloc] init];
//枠の作成
oLabel.frame = CGRectMake(00.0f, 00.0f, 350.0f, 100.0f);
//文字列をラベルに設定
oLabel.text = @"Hello World!!";
//Viewに追加
[self.view addSubview:oLabel];
[oLabel setHidden:YES];
//ダイアログの作成
oAlert = [[UIAlertView alloc] init];
oAlert.delegate = self;
//ダイアログのタイトルを設定
oAlert.title = @"テストのダイアログ";
//メッセージを設定
oAlert.message = @"ラベルを表示する";
//ボタンを追加
[oAlert addButtonWithTitle:@"はい"];
[oAlert addButtonWithTitle:@"いいえ"];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
// ダイアログのボタンが押された時に呼ばれるデリゲート例文
-(void)alertView:(UIAlertView*)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex {
switch (buttonIndex) {
case 0:
//1番目のボタンが押されたときの処理を記述する
[oLabel setHidden:NO];
break;
case 1:
//2番目のボタンが押されたときの処理を記述する
[oLabel setHidden:YES];
break;
}
}
// 呼ばれるonPushメソッド
-(void)onPush:(UIButton*)button:(id)sender{
//ダイアログを表示する
[oAlert show];
}
@end
■実行結果
1.初期表示
2.ボタン押下後
3.はいを押すと
4.もう一度、ダイアログを出して、いいえを押すと
実行結果はこんな感じです。
だいぶアプリっぽくなってきましたね。
すごい人なら、これくらいの機能だけで、
大ヒットアプリを余裕で作れます。
いや、本当に!!
なんたって
すごい人ですから。。。
ソースを振り返ると、
//ボタン押下時のタイトル
[oButton setTitle:@"ボタン押下中!!" forState:UIControlStateHighlighted];
このソースが全然意味がないですね。
2.の画像をよく見るとわかると思うのですが、
ボタンの文字列が押下前とかわっていません。。。
それと、今更ですが、
iOSだと、Dialogという文字列は使われていませんでした。
代わりに、Alertがよく使われていますね。
今更ですが、今回のタイトルは
008-アラートの作成(UIAlertView)
で、お願いいたします。
なぜ、ダイアログを使わない??