ios 通过传入数组而不是 varlist 创建 UIActionSheet 'otherButtons'
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2384044/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Create UIActionSheet 'otherButtons' by passing in array, not varlist
提问by Greg Maletic
I have an array of strings that I want to use for button titles on a UIActionSheet. Unfortunately, the otherButtonTitles: argument in the method invocation takes a variable length list of strings, not an array.
我有一个字符串数组,我想用于 UIActionSheet 上的按钮标题。不幸的是,方法调用中的 otherButtonTitles: 参数采用可变长度的字符串列表,而不是数组。
So how I can I pass these titles into the UIActionSheet? The workaround I've seen suggested is to pass nil into otherButtonTitles:, then specify the button titles individually by using addButtonWithTitle:. But this has the problem of moving the "Cancel" button to the first position on the UIActionSheet rather than the last; I want it to be the last one.
那么如何将这些标题传递到 UIActionSheet 中呢?我看到建议的解决方法是将 nil 传递给 otherButtonTitles:,然后使用 addButtonWithTitle: 单独指定按钮标题。但这存在将“取消”按钮移动到 UIActionSheet 上的第一个位置而不是最后一个位置的问题;我希望它是最后一个。
Is there a way to 1) pass an array in lieu of a variable list of strings, or alternatively 2) move the cancel button to the bottom of the UIActionSheet?
有没有办法 1)传递一个数组来代替字符串的变量列表,或者 2)将取消按钮移动到 UIActionSheet 的底部?
Thanks.
谢谢。
回答by Jab
I got this to work (you just need to, be ok with a regular button, and just add it after :
我让这个工作(你只需要,用一个普通的按钮就可以了,只需在之后添加它:
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];
回答by Nick
One little note: [actionSheet addButtonWithTitle:] returns the index of that button, so to be safe and "clean" you can do this:
一个小提示:[actionSheet addButtonWithTitle:] 返回该按钮的索引,所以为了安全和“干净”,你可以这样做:
actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];
回答by Stephen Donnell
Taking Jaba's and Nick's answers and extending them a little further. To incorporate a destruction button into this solution:
采纳 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];
回答by Kevin ABRIOUX
There is the swift version for the response :
有快速版本的响应:
//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)
To get value selected, add delegate to your ViewController :
要选择值,请将委托添加到您的 ViewController :
class MyViewController: UIViewController, UIActionSheetDelegate
And implement the method "clickedButtonAtIndex"
并实现方法“clickedButtonAtIndex”
func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
let selectedValue : String = values[buttonIndex]
}