- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch(actonSheet.tag) {
case tag1:
switch(clickedButtonAtIndex) {
case 0:
処理①
break;
case 1:
処理②
break;
case 3:
処理③
break;
default:
break;
}
break;
case tag2:
switch(clickedButtonAtIndex) {
case 0:
処理②
break;
case 1:
処理③
break;
case 3:
処理④
break;
default:
break;
}
break;
default:
break;
}
}
// 各種通知から対象オブジェクトを取り出す為の共通キー
#define ACTION_SHEET_BUTTON_KEY_OBJECT @"ActionSheetButtonKey_Object"
// アクションシートのボタンベースクラス
@interface ActionSheetButtonBase : NSObject
{
NSString* _title;
id _object;
}
@property (nonatomic, retain, readwrite) NSString* Title;
@property (nonatomic, retain, readwrite) id Object;
-(id) initWithObject:(id)object;
// アクション
-(void) action;
@end
@implementation ActionSheetButtonBase
@synthesize Title = _title;
@synthesize Object = _object;
-(id) initWithObject:(id)object
{
if (self = [super init]) {
self.Title = @"";
self.Object = object;
}
return self;
}
// 継承クラスでオーバーライドする
-(void) action
{
}
@end
// 計算オブジェクトのタイトル編集ボタン
@interface CalcObjectTitleEditButton : ActionSheetButtonBase
@end
@implementation CalcObjectTitleEditButton
-(id) initWithObject:(id)object
{
if (self = [super initWithObject:object]) {
self.Title = @"タイトルの編集";
}
return self;
}
-(void) action
{
// タイトル編集ビューを表示する
UIAlertView* view = [[UIAlertView alloc] initWithTitle:@"タイトルの編集" message:@"新しいタイトルを入力してください。" delegate:_object cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
view.alertViewStyle = UIAlertViewStylePlainTextInput;
[view show];
}
@end
#import "ActionSheetButtonBase.h"
// アクションシートの拡張クラス
@interface UIActionSheetEx : UIActionSheet
<UIActionSheetDelegate>
{
NSArray* _buttonList;
}
@property (nonatomic, readonly) NSArray* ButtonList;
// アクションシートのボタンを追加する
-(void) addButtonList:(NSArray*)buttonList;
@end
@implementation UIActionSheetEx
@synthesize ButtonList = _buttonList;
-(id) init
{
if (self = [super init]) {
self.delegate = self;
}
return self;
}
-(void) dealloc
{
[_buttonList release];
[super dealloc];
}
// アクションシートのボタンを追加する
-(void) addButtonList:(NSArray*)buttonList
{
_buttonList = [buttonList retain];
for (ActionSheetButtonBase* button in buttonList) {
[self addButtonWithTitle:button.Title];
}
}
// アクションシートのコールバック
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
ActionSheetButtonBase* button = [_buttonList objectAtIndex:buttonIndex];
// ボタンに設定されたアクションを実行する
[button action];
}
@end
// アクションシートを生成する
UIActionSheetEx* sheet = [[[UIActionSheetEx alloc] init] autorelease];
sheet.title = @"";
sheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
[sheet addButtonList:[NSArray arrayWithObjects:
[[[CalcObjectTitleEditButton alloc] initWithObject:obj] autorelease],
[[[CalcObjectSetDefaultValueButton alloc] initWithObject:obj] autorelease],
[[[CalcObjectDeleteButton alloc] initWithObject:obj] autorelease],
[[[ActionSheetCancelButton alloc] initWithObject:obj] autorelease],
nil]];
sheet.destructiveButtonIndex = 2;
sheet.cancelButtonIndex = 3;
[sheet showInView:self.view];
コメントする