2010-03-05 53 views
109

我有一個字符串數組,我想在UIActionSheet上使用按鈕標題。不幸的是,方法調用中的otherButtonTitles:參數需要一個可變長度的字符串列表,而不是一個數組。通過傳入數組創建UIActionSheet'otherButtons',而不是varlist

那麼我怎麼才能將這些標題傳遞到UIActionSheet?我見過的解決方法是將nil傳遞給otherButtonTitles :,然後使用addButtonWithTitle:分別指定按鈕標題。但是這有將「取消」按鈕移動到UIActionSheet上的第一個位置而不是最後一個的問題;我希望它是最後一個。

有沒有辦法讓1)傳遞數組來替代字符串的變量列表,或者2)將取消按鈕移動到UIActionSheet的底部?

謝謝。

+0

不確定這是否會工作,但UIActionSheet的cancelButtonIndex屬性不是隻讀的。嘗試設置它,看看是否改變按鈕的順序? – lostInTransit 2010-03-05 03:51:24

回答

246

我得到了這個工作(你只需要,是確定與常規按鍵,並隨即將其添加:

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]; 
+19

這工作;謝謝。沒有意識到可以設置cancelButtonIndex屬性。有一件事我認爲我們都可以同意:蘋果公司的這個API很糟糕。 – 2010-03-05 19:14:29

+11

我秒這! 99,99%的文檔也很糟糕。這就像試圖從一本古老的希伯來文書中學習腦部手術而不知道語言。 – SpaceDog 2010-08-16 23:35:04

+3

我非常希望我能夠多投這麼多次。開裂的答案,我不能相信我已經走了這麼久不知道這個! – mattjgalloway 2012-04-04 08:56:19

78

一個小提示:[actionSheet addButtonWithTitle:]返回按鈕的索引,所以是安全的,「乾淨」,你可以這樣做:

actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"]; 
+0

這將取消按鈕紅色? – 2013-03-18 07:06:21

+1

@JimThio不,紅色按鈕叫做「destructiveButton」,並且它有一個相應的屬性'destructiveButtonIndex' – Nick 2013-03-20 20:46:32

3

以雅巴的和尼克的答案,這進一步延長了他們一點要合併銷燬按鈕進入此解決方案:

// 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]; 
0

沒有爲響應迅速的版本:

//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] 
} 
相關問題