UIActionSheetのボタンタイトルに使用する文字列の配列があります。残念ながら、メソッド呼び出しのotherButtonTitles:引数は、配列ではなく、文字列の可変長リストを取ります。
これらのタイトルをUIActionSheetに渡すにはどうすればよいですか?私が提案した回避策は、nilをotherButtonTitles:に渡し、addButtonWithTitle:を使用してボタンのタイトルを個別に指定することです。しかし、これには、「キャンセル」ボタンを最後ではなくUIActionSheetの最初の位置に移動するという問題があります。最後にしたいです。
1)文字列の変数リストの代わりに配列を渡す、または2)UIActionSheetの下部にキャンセルボタンを移動する方法はありますか?
ありがとう。
私はこれを動作させました(通常のボタンで大丈夫で、あとで追加するだけです:
NSArray *array = @[@"1st Button",@"2nd Button",@"3rd Button",@"4th Button"];
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title Here"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
// ObjC Fast Enumeration
for (NSString *title in array) {
[actionSheet addButtonWithTitle:title];
}
actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];
[actionSheet showInView:self.view];
ちょっとした注意:[actionSheet addButtonWithTitle:]はそのボタンのインデックスを返すので、安全で「クリーン」にするには、次のようにします。
actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];
JabaとNickの回答を取り上げ、それらをさらに拡張します。このソリューションに破棄ボタンを組み込むには:
// Create action sheet
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:title
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
// Action Buttons
for (NSString *actionName in actionNames){
[actionSheet addButtonWithTitle: actionName];
}
// Destruction Button
if (destructiveName.length > 0){
[actionSheet setDestructiveButtonIndex:[actionSheet addButtonWithTitle: destructiveName]];
}
// Cancel Button
[actionSheet setCancelButtonIndex: [actionSheet addButtonWithTitle:@"Cancel"]];
// Present Action Sheet
[actionSheet showInView: self.view];
応答にはSwiftバージョンがあります:
//array with button titles
private var values = ["Value 1", "Value 2", "Value 3"]
//create action sheet
let actionSheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil)
//for each value in array
for value in values{
//add a button
actionSheet.addButtonWithTitle(value as String)
}
//display action sheet
actionSheet.showInView(self.view)
値を選択するには、ViewControllerにデリゲートを追加します。
class MyViewController: UIViewController, UIActionSheetDelegate
そして、メソッド「clickedButtonAtIndex」を実装します
func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
let selectedValue : String = values[buttonIndex]
}