Create UIActionSheet 'otherButtons' by passing in array, not varlist

前端 未结 4 783
太阳男子
太阳男子 2020-12-22 22:20

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

相关标签:
4条回答
  • 2020-12-22 22:48

    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 :

    class MyViewController: UIViewController, UIActionSheetDelegate
    

    And implement the method "clickedButtonAtIndex"

    func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
        let selectedValue : String = values[buttonIndex]
    }
    
    0 讨论(0)
  • 2020-12-22 22:49

    Taking Jaba's and Nick's answers and extending them a little further. To incorporate a destruction button into this solution:

    // 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 讨论(0)
  • 2020-12-22 22:52

    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];
    
    0 讨论(0)
  • 2020-12-22 22:57

    One little note: [actionSheet addButtonWithTitle:] returns the index of that button, so to be safe and "clean" you can do this:

    actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];
    
    0 讨论(0)
提交回复
热议问题