2013年1月20日日曜日

008−ダイアログの作成(UIAlertView)


ダイアログの表示について記載していこうと思います。
今回もコンセプトとしては、storyboardを使わない方向で行きたいと思います。
iPhoneのダイアログはAndroidと比べってかっこいいダイアログなので、
カスタマイズしなくてもそのまま使えるのがいいですね。

個人的にはアプリを作成すると、
一番お世話になるのがダイアログです。

どういう時に、どう使うかというと

・強制的にユーザー操作を止めたい!!
・ユーザーにメッセージを送りたい!!
・ユーザーに選択肢を与えたい!!

おまけで、

・座標を気にしなくても画面の真ん中に表示される


まぁ、結構便利なんです。

はい。。。。。


一番下のは、作り手側の気持ちとして、
すごいありがたいことでして、
サンプルソースでは、直接座標をしている事が多いのですが、
やっぱり、作り手としては座標の決め打ちはちょっと怖いですよね。

まぁ、iPhoneならそこまで端末が多い訳ではないので、
そこまで気にしなくてもいいかもしれませんが。。。

導入部分はこのくらいにして、メインのダイアログの表示方法です。


//ダイアログの作成
oAlert = [[UIAlertView alloc] init];
oAlert.delegate = self;
//ダイアログのタイトルを設定
oAlert.title = @"テストのダイアログ";
//メッセージを設定
oAlert.message = @"ラベルを表示する";
//ボタンを追加
[oAlert addButtonWithTitle:@"はい"];
[oAlert addButtonWithTitle:@"いいえ"];
//ダイアログを表示する
[oAlert show];

他のUIと同じ感覚で、
生成して文字列設定しています。
addSubviewのかわりに
showを使っています。

oAlert.delegate = self;

こちらの処理ですが、細かい事は自分も
あまりよくわからないので、大変申し訳ないのですが、
処理内容を通知する関数をどこに作るかという設定だと思います。

ダイアログ押下時に呼ばれる関数を作ると

// ダイアログのボタンが押された時に呼ばれるデリゲート例文
-(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)

で、お願いいたします。

なぜ、ダイアログを使わない??

0 件のコメント:

コメントを投稿