メモ帳の作成(5)~アクションシート

2010. 07. 14
テキストビュー編集時に出る上部ツールバー左側の『Clear』ボタンは、テキストビューの文字列を全削除するのですが、削除前に削除の可否を問い合わせるのがアクションシートです。

515


●UIActionSheetクラス

UIActionSheetクラスは、タスクを続行するにあたり、ユーザに選択肢を提示して設定を行う場合に使用します。

また潜在的に危険なアクションについて、ユーザの承認を得る場合にアクションシートを使用することができます。

アクションシートはオプションのタイトルと一つ以上のボタン、それぞれに対応する取るべきアクションを含みます。

このクラスのプロパティとメソッドを使って、アクションシートのメッセージ、スタイル、ボタンを提示前に構成します。

また、アクションシートにはデリゲートを割り当てる必要があります。

デリゲートオブジェクトはUIActionSheetDelegateプロトコルに準拠し、任意のボタンをタップした際に関連付けされているアクションを実行する責任があります。

デリゲートのメソッドの実装についての詳細は『UIActionSheetDelegate Protocol Reference』を参照してください。

アクションシートは、ツールバー、タブバー、ボタンバーアイテム、ビューから提示することができます。

このクラスでどのようにアクションシートを提示するかは、開始するビューと現在のプラットフォームを考慮して決定してください。

iPhoneとiPod touchデバイスでアプリケーションを実行する場合、通常は自身のビューのウィンドウの下端からスライドアップしてアクションシートが表示されます。

iPadデバイスでアプリケーションを実行する場合、通常は開始したビューに結びつき、適切な方法でポップオーバーしてアクションシートが表示されます。

ポップオーバーの外側をタップしたり任意のカスタムボタンをタップした場合は、自動的にアクションシートは破棄されます。

またプログラムで破棄することもできます。

iPadでアクションシートを提示する時、キャンセルボタンを含めてはならない場合があります。

アクションシートを提示する際に、システムはポップオーバーの内側にアニメーションを使わないでアクションシートを表示します。

なぜなら、アイテムを選択せずにポップオーバーの外側をタップした場合にアクションシートを破棄することが、シートをキャンセルするデフォルトの方法になっているからです。

したがって、キャンセルボタンを含めると混乱の元になります。

しかし、既存のポップオーバーと他のコンテンツの上にアニメーションを使ってアクションシートを表示する場合は、キャンセルボタンは適しています。

詳細は『iOSヒューマンインターフェイスガイドライン』を参照してください。

重要:
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.


●UIActionSheetDelegateプロトコル

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

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

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

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

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

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

アクションシートが自動的に破棄された後、actionSheet:clickedButtonAtIndex:デリゲートメソッドが呼び出されます。

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

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

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


●アクションシートの表示

まずアクションシートデリゲートプロトコルをヘッダファイルに追加します。
(太字が追加した部分)

#import <Foundation/Foundation.h>

@interface Memo : NSObject <UITextViewDelegate, UIPickerViewDelegate, UIPickerViewDataSource, UIActionSheetDelegate> {
// アウトレット
    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

512

続いて『Clear』ボタンのアクションメソッドであるclearMemoを実装します。

- (IBAction)clearMemo {
    // アクションシートを生成
    UIActionSheet *actSheet = [[UIActionSheet alloc] initWithTitle:@"Are you sure you want to clear this memo?" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Clear" otherButtonTitles:nil];

    // アクションシートを表示
    [actSheet showInView:imageView];

    // アクションシートを破棄
    [actSheet release];
}

513

アクションシートのタイトルは『Are you sure you want to clear this memo?』、赤いデストラクティブボタンとして『Clear』、そして黒いキャンセルボタンとして『Cancel』という構成になっています。

showInViewでアクションシートを表示させるとシステムに管理が移行するので、アプリケーション側はreleaseします。


・initWithTitle:delegate:cancelButtonTitle:destructiveButtonTitle:otherButtonTitles:
(UIActionSheetクラス)

- (id)initWithTitle:(NSString *)title delegate:(id < UIActionSheetDelegate >)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...

指定した開始パラメータを使用してアクションシートを初期化します。

戻り値は新規に初期化されたアクションシートです。

アクションシートは自動的に外観の破棄とキャンセルボタンを設定します。

アクションシートがボタンを一つしか含まない場合、破棄とキャンセルボタンに関連付けされているカスタムカラーを適用しません。

title:アクションシートのタイトルエリアに表示する文字列を指定します。
タイトルエリアにテキストを表示したくない場合はnilを指定します。

delegate:レシーバのデリゲートオブジェクトを指定します。
このパラメータはnilにする可能性もありますが、アクションシートをタップした際にデリゲートが応答するので通常は提供します。

cancelButtonTitle:キャンセルボタンのタイトルを指定します。
このボタンはアクションシートに自動的に追加され、適したインデックスが割り当てられ、cancelButtonIndexプロパティから使用できます。
このボタンは黒で表示され、キャンセルアクションを表します。
キャンセルボタンを必要としない、またはiPadでアクションシートを提示しない場合はnilを指定します。

destructiveButtonTitle:デストラクティブ(破壊的な)ボタンのタイトルを指定します。
このボタンはアクションシートに自動的に追加され、適したインデックスが割り当てられ、destructiveButtonIndexプロパティから使用できます。
このボタンは赤で表示され、破壊的なアクションを表します。
デストラクティブボタンを使用しない場合はnilを指定します。

otherButtonTitles, ...:追加したい任意のボタンのタイトルを指定します。
このパラメータは文字列のリストで、コンマ区切り、nil終端で構成されます。
例えば2つのボタンを追加する場合の値指定は、『@"Button 1", @"Button 2", nil』となります。


・showInView:
(UIActionSheetクラス)

- (void)showInView:(UIView *)view

指定したビューにアクションシートを表示させます。

アクションシートの外観はアニメーションされます。

iPadでは、このメソッドは画面の中央にアクションシートを表示します。

一般的にiPadアプリケーションでアクションシートを表示させる場合は、showFromRect:inView:animated:メソッドを代わりに使って表示します。


●アクションシートのイベント処理

アクションシートのボタンがタップされた際の処理を記述します。

デストラクティブボタン(Clearボタン)が選択された際にはテキストを空にし、キャンセルボタンの選択は何も記述していなく、そのまま復帰することになります。

516

// アクションシートのボタンがタップされた時に呼ばれるメソッド - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 0) {    // ボタンのインデックス値で分岐
        memoView.text = @"";    // テキストをクリア
    }
}

514


・actionSheet:clickedButtonAtIndex:
(UIActionSheetDelegateプロトコル)

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

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

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

actionSheet:ボタンを含むアクションシートを指定します。

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



参考文献

UIActionSheet Class Reference

UIActionSheetDelegate Protocol Reference

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

商品詳細を見る






bose_soundsport_free
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
09 | 2017/10 | 11
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 31 - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

bose_soundsport_free
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