メモ帳の作成(6)~アラート

2010. 07. 15
下部ツールバーのインフォメーションボタンをタップするとアラートが表示されるようにします。

本来の使用目的とは異なりますが、ここではアプリケーションの情報表示と、ウェブサイトへの誘導(ボタンをタップするとSafariが起動して設定したURLを開く)を行っています。

519


●UIAlertViewクラス

UIAlertViewクラスは、ユーザに対するアラートメッセージの表示に使用します。

アラートビュー関数はアクションシート(UIActionSheetのインスタンス)と似ていますが、外観は異なっています。

このクラスで定義されているプロパティとメソッドは、タイトル、メッセージ、アラートビューのデリゲート、ボタンの構築に使用されます。

カスタムボタンを追加する場合は、デリゲートの設定が必要です。

デリゲートはUIAlertViewDelegateプロトコルに準拠してください。

アラートビューを一度構成して表示するには、showメソッドを使用します。

重要:
iPhone OS 4.0以降は、アラートビューは自動的に破棄されませんが、バックグラウンドにアプリケーションが移動します。
この動作は以前のOSバージョンとは異なり、アラートビューの自動的なキャンセル(とキャンセルハンドラの実行)は、アプリケーションの終了シーケンスの一部となっているためです。
この状態は、アラートビューの破棄を決定する(そしてキャンセルハンドラが実行される)、またはアプリケーションがバックからフォアグラウンドに移動してアラートビューが取り除かれるまで続きます。
(※以下、訳しきれなかったので原文を掲載します)
Remember that your application can still be terminated while in the background, so some type of action may be necessary in either case.


●UIAlertViewDelegateプロトコル

UIAlertViewDelegateプロトコルは、UIAlertViewオブジェクトを実装をするため、デリゲートのメソッドを定義します。

デリゲートはボタンアクションと、いくつかの他のカスタム動作を実装します。

このプロトコルで定義されているいくつかのメソッドはオプションです。

独自のボタンやアラートビューにカスタマイズした動作を追加する場合は、このプロトコルに準拠した対応するデリゲートメッセージを処理するデリゲートを実装します。

指定したアプリケーションオブジェクトのデリゲートの一つとして、アラートビューオブジェクトのデリゲートプロパティを使用します。

独自のボタンをアラートビューに追加する場合は、ボタンがクリックされた時に応答するalertView:clickedButtonAtIndex:メッセージをデリゲートに実装する必要がありますが、それ以外の場合はカスタムボタンは何もしません。

アラートビューが自動的に破棄された後、alertView:clickedButtonAtIndex:デリゲートメソッドが呼び出されます。

システムがアラートビューをキャンセルした際に適したアクションを取る、alertViewCancel:メソッドを任意で実装することができます。

このメソッドを実装しない場合、デリゲートはデフォルトの動作として、ユーザがキャンセルボタンをクリックしビューを閉じるシミュレートを行います。

また『カスタマイズ動作(Customizing Behavior)』のメソッドを使用して、アラートビューの破棄や提示する動作を任意に拡張することができます。


●アラートの表示

本書では触れていませんが、アラートビューデリゲートプロトコルをヘッダファイルに追加します。
(太字が追加した部分)

#import <Foundation/Foundation.h>

@interface Memo : NSObject <UITextViewDelegate, UIPickerViewDelegate, UIPickerViewDataSource, UIActionSheetDelegate, UIAlertViewDelegate> {
    // アウトレット
    IBOutlet UITextView *memoView; // メモ入力用のテキストビュー
    IBOutlet UIPickerView *fontPicker; // フォント選択用ピッカービュー
    IBOutlet UIImageView *imageView; // 背景画像用イメージビュー
    IBOutlet UIToolbar *topToolbar; // 画面上部のツールバー
    IBOutlet UIToolbar *btmToolbar; // 画面下部のツールバー

    // ピッカービューに表示するデータ
    NSMutableArray *fontNames; // フォント名一覧
    NSArray *fontSizes; // フォントサイズ一覧
}
// アクションメソッド
- (IBAction)selectFont; // フォント選択画面の表示/非表示
- (IBAction)doneMemoEdit; // メモ編集完了
- (IBAction)clearMemo; // メモクリア
- (IBAction)showAbout; // アバウト画面表示

@end

520

アラートのタイトルは『Information』、詳細は『Memo Application Sample』、キャンセルボタンのタイトルは『OK』、その他のボタンのタイトルは『WebSite』という構成になっています。

showメソッドでアラートを表示すると、システムに管理が移行するので、アプリケーション側ではreleaseします。

- (IBAction)showAbout {
    // アラートを生成
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Information" message:@"Memo Application Sample" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"WebSite", nil];

    // アラートを表示
    [alert show];

    // アラートを破棄
    [alert release];
}

517


・initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:
(UIAlertViewクラス)

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...

アラートビューを初期化する便利なメソッドです。

戻り値は新規に初期化されたアラートビューになります。

title:レシーバのタイトルバーに表示する文字列を指定します。

message:タイトルの詳細な説明をテキストで指定します。

delegate:レシーバのデリゲート、またはデリゲートが必要無い場合はnilを指定します。

cancelButtonTitle:キャンセルボタンのタイトル、またはキャンセルボタンが無い場合はnilを指定します。
この引数を指定することは、このタイトルでaddButtonWithTitle:を呼び出し、返される値をキャンセルボタンのインデックスと設定するのと同義です。

otherButtonTitles,:他のボタンのタイトルを指定します。
この引数を指定することは、このタイトルでaddButtonWithTitle:を呼び出してボタンを追加するのと同義です。

...:レシーバに更に追加する場合はボタンのタイトルを、終端の場合はnilを指定します。


・show
(UIAlertViewクラス)

- (void)show

レシーバをアニメーションを使って表示します。


●アラートのイベント処理

アラートビューのボタンがタップされた際の処理を記述します。

キャンセルボタン(OKボタン)の選択では何も記述していなく、そのまま復帰します。

その他のボタン(WebSiteボタン)を選択した場合は、sharedApplicationメソッドでアプリケーションのインスタンスを呼び出し、URLWithString:メソッドでNSURLオブジェクトを生成(ここでは拙作ブログのURLを指定しています)、openURL:メソッドでURLを開きます。

// アラートのボタンがタップされた時に呼ばれるメソッド
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) { // ボタンのインデックス値で分岐
        // Safariで指定のURLを表示
        UIApplication *app = [UIApplication sharedApplication];
        NSURL *url = [NSURL URLWithString:@"http://secondflush2.blog.fc2.com/"];
        [app openURL:url];
    }
}

518

本書ではalertView:clickedButtonAtIndex:の第一引数が(UIActionSheet *)actionSheetとなっていますが、(UIAlertView *)alertViewの間違いです。


・alertView:clickedButtonAtIndex:
(UIAlertViewDelegateプロトコル)

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

アラートビューのボタンをユーザがクリックした時にデリゲートに送信されます。

このメソッドが呼び出された後、レシーバは自動的に破棄されます。

alertView:ボタンを含むアラートビューを指定します。

buttonIndex:クリックされたボタンの位置を指定します。
ボタンのインデックスは0から始まります。


・openURL:
(UIApplicationクラス)

- (BOOL)openURL:(NSURL *)url

指定したURLのリソースを開きます。

戻り値は、URLの場所が正常に開けた場合はYES、それ以外の場合はNOを返します。

URLは、同じまたは別のアプリケーションのリソースの場所を指定できます。

リソースが別のアプリケーションの場合、このメソッドを呼び出すことにより呼び出し元のアプリケーションが終了し、他のアプリケーションが起動する場合があります。

このメソッドの前に、canOpenURL:で呼び出すアプリケーションが処理可能かどうかを照合することができます。



参考文献

UIAlertView Class Reference

UIAlertViewDelegate Protocol Reference

UIApplication Class Reference

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






Lifestyle 650 home entertainment system
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Lifestyle 650 home entertainment system
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR