しかし不便なことに、initWithTitleのotherButtonTitlesには、配列を渡すことができません。
この問題に対処するためには、一度ボタンなしでUIActionSheetを初期化した後で、項目をaddButtonWithTitleで追加していくことになります。
ただしこのとき注意が必要なのは、初期化のときに、キャンセルボタンをつくってはいけないということです。他のボタンを追加した後でキャンセルボタンを指定しないと、iOS 4.xのバグでボタンのインデックスがメチャクチャになってしまい、actionSheet:clickedButtonAtIndex: の処理が正常に行えなくなります。(iOS 5では正常に動作するようです。)
だいたい次のようなコードになるかと思います。
// ボタンなしで一度初期化する
UIActionSheet* sheet =[ [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"ActionSheetTitle", nil) delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil] autorelease];
// ボタンを追加
NSArray* buttonTitleArray = [MyButtons array];
for (NSString* buttonTitle in buttonTitleArray) {
[sheet addButtonWithTitle:buttonTitle];
}
// 古いiOSには、キャンセルボタンも後から追加しないインデクスが狂うバグがある
sheet.cancelButtonIndex = [sheet addButtonWithTitle:NSLocalizedString(@"Cancel", nil)];
0 件のコメント:
コメントを投稿