Estoy totalmente nuevo para swift (y la programación en iOS), pero empecé a jugar con ella (que no era una buena idea cuando todo está todavía en versión beta :D). Así que traté de averiguar por mí mismo, pero todavía nada. Incluso trató de agregar subvista que contiene el selector sin ningún éxito. Así que ¿puede alguien ayudarme?

  • Yo había logrado agregar control de giro en UIAlertController, también puede agregar UIPickerView con la misma lógica aquí es un enlace stackoverflow.com/questions/25652101/please-wait-dialog-in-ios8/…
  • Que es genial … yo lo vi … Pero no puedo votar por tu respuesta (no de reputación)
  • publicar respuesta aquí, pero es en objective-c
  • Apple docs decir no a la subclase UIAlertController debido a un problema con su vista interna de la jerarquía. Así que creo que el de abajo respuestas son peligrosos. (Y yo no podía llegar a ellos a trabajar para mí.) Ver esta otra pregunta que es aceptado respuesta de los estados esto: stackoverflow.com/questions/24330152/…
  • Yo no veo nada peligroso en las respuestas a continuación. Espero que el iPhone no explotar a causa de una modificación de la hoja de Acción. Y ¿por qué debería crear algún elemento, si hay uno existente que puedo usar. Apple dice que para un montón de cosas que no son inventados para el propósito que los desarrolladores necesitan, pero no inventar algo útil para ellos. Por lo que todos Swift es uno de los retos a enfrentar. No me puedo imaginar un serio proyecto de aplicación sin necesidad de utilizar algún tipo de hacks o trucos si quieres hacer como quiera. Este ejemplo funciona bien. Todo el mundo puede usarlo en el libre albedrío .. 🙂
  • La documentación de Apple de UIAlertController explícitamente te advierto que NO toque el punto de vista de la jerarquía, que todas estas respuestas están haciendo con alertcontroller.view.addSubview . No hacer esto, o vas a llegar a arrepentirse más tarde

11 Comentarios

  1. 29

    Bueno este es mi código final que trabajó para mí. Es una mezcla de un par de ideas. Las principales razones que me acepta mi respuesta es que mi código está en Swift, mi código utiliza UIAlertController, mi código es para el selector. Quiero agradecer a Jageen – mi respuesta se basa en su idea.

        func showPickerInActionSheet(sentBy: String) {
    var title = ""
    var message = "\n\n\n\n\n\n\n\n\n\n";
    var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.ActionSheet);
    alert.modalInPopover = true;
    //Create a frame (placeholder/wrapper) for the picker and then create the picker
        var pickerFrame: CGRect = CGRectMake(17, 52, 270, 100); //CGRectMake(left), top, width, height) - left and top are like margins
        var picker: UIPickerView = UIPickerView(frame: pickerFrame);
    /* If there will be 2 or 3 pickers on this view, I am going to use the tag as a way
    to identify them in the delegate and datasource. /* This part with the tags is not required.
    I am doing it this way, because I have a variable, witch knows where the Alert has been invoked from.*/
    if(sentBy == "profile"){
    picker.tag = 1;
    } else if (sentBy == "user"){
    picker.tag = 2;
    } else {
    picker.tag = 0;
    }
    //set the pickers datasource and delegate
        picker.delegate = self;
    picker.dataSource = self;
    //Add the picker to the alert controller
        alert.view.addSubview(picker);
    //Create the toolbar view - the view witch will hold our 2 buttons 
        var toolFrame = CGRectMake(17, 5, 270, 45);
    var toolView: UIView = UIView(frame: toolFrame);
    //add buttons to the view
        var buttonCancelFrame: CGRect = CGRectMake(0, 7, 100, 30); //size & position of the button as placed on the toolView
    
    //Create the cancel button & set its title
        var buttonCancel: UIButton = UIButton(frame: buttonCancelFrame);
    buttonCancel.setTitle("Cancel", forState: UIControlState.Normal);
    buttonCancel.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal);
    toolView.addSubview(buttonCancel); //add it to the toolView
    
    //Add the target - target, function to call, the event witch will trigger the function call
        buttonCancel.addTarget(self, action: "cancelSelection:", forControlEvents: UIControlEvents.TouchDown);
    //add buttons to the view
        var buttonOkFrame: CGRect = CGRectMake(170, 7, 100, 30); //size & position of the button as placed on the toolView
    
    //Create the Select button & set the title
        var buttonOk: UIButton = UIButton(frame: buttonOkFrame);
    buttonOk.setTitle("Select", forState: UIControlState.Normal);
    buttonOk.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal);
    toolView.addSubview(buttonOk); //add to the subview
    
    //Add the tartget. In my case I dynamicly set the target of the select button
        if(sentBy == "profile"){
    buttonOk.addTarget(self, action: "saveProfile:", forControlEvents: UIControlEvents.TouchDown);
    } else if (sentBy == "user"){
    buttonOk.addTarget(self, action: "saveUser:", forControlEvents: UIControlEvents.TouchDown);
    }
    //add the toolbar to the alert controller
        alert.view.addSubview(toolView);
    self.presentViewController(alert, animated: true, completion: nil);
    }
    func saveProfile(sender: UIButton){
    //Your code when select button is tapped
    
    }
    func saveUser(sender: UIButton){
    //Your code when select button is tapped
    }
    func cancelSelection(sender: UIButton){
    println("Cancel");
    self.dismissViewControllerAnimated(true, completion: nil);
    //We dismiss the alert. Here you can add your additional code to execute when cancel is pressed
    }
    //returns number of rows in each component..
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
    if(pickerView.tag == 1){
    return self.profilesList.count;
    } else if(pickerView.tag == 2){
    return self.usersList.count;
    } else  {
    return 0;
    }
    }
    //Return the title of each row in your picker ... In my case that will be the profile name or the username string
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    if(pickerView.tag == 1){
    var selectedProfile: Profiles = self.profilesList[row] as Profiles;
    return selectedProfile.profileName;
    } else if(pickerView.tag == 2){
    var selectedUser: Users = self.usersList[row] as Users;
    return selectedUser.username;
    } else  {
    return "";
    }
    }
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if(pickerView.tag == 1){
    var choosenProfile: Profiles = profilesList[row] as Profiles;
    self.selectedProfile = choosenProfile.profileName;
    } else if (pickerView.tag == 2){
    var choosenUser: Profiles = usersList[row] as Users;
    self.selectedUsername = choosenUser.username;
    }
    }
    • Estoy utilizando el mismo fragmento anterior, pero mi PickerView no se muestra arriba. Nuevo en programación swift
    • Usted tiene que llamar a la función «showPickerInActionSheet()» para mostrar la PickerView. Usted puede llamar en @IBAction función de enlazar a algún botón o algún otro elemento, o en algunos regular de la función
    • Si todo con su código se ve bien, trate de buscar algún error/mensaje de advertencia en la consola (especialmente si usted ha tratado de modificar el código).
    • Gracias por la respuesta … he encontrado el problema y solucionado
    • Si alguien más está teniendo problemas, es necesario establecer la UIAlertController a UIAlertControllerStyleAlert, no UIAlertControllerStyleActionSheet!
    • Cuando hago clic en seleccionar,nada de lo que está haciendo, incluso me la funcionalidad del conjunto en saveProfile.Alguna Ayuda?
    • Esta respuesta es todo lo que quería! Gracias!

  2. 10

    Probar este he hecho algún truco…

    A continuación el código está trabajando para mí en el iPod iOS8beta5 + XCode6

    Puedo añadir UIActivityIndicatorView de control en UIAlertController en objective-c.

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
    message:@"Please wait\n\n\n"
    preferredStyle:UIAlertControllerStyleAlert];
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    spinner.center = CGPointMake(130.5, 65.5);
    spinner.color = [UIColor blackColor];
    [spinner startAnimating];
    [alert.view addSubview:spinner];
    [self presentViewController:alert animated:NO completion:nil];

    Hay alguna forma de agregar UIPickerView en UIAlertController (Alerta o ActionSheet) en Swift?


    Nota :
    Es en objective-c, pero esta es demostrar que también podemos hacer esto mediante el uso de swift.

    • Como UIAlertController es un controlador de vista también se puede heredar y llevar a cabo tus cosas
  3. 7

    Puede utilizar código similar en iOS8 /Swift para añadir sus propios controles en una alerta (en lugar de una hoja de acción) que aparece en el medio de la pantalla.

    El único problema que he tenido con hacer esto con alerta.addSubView fue que la alerta de ver sólo los tamaños de sí misma de acuerdo a los controles que se han agregado a través de los métodos de la clase. Tienes que agregar tus propias limitaciones para asegurarse de que la alerta abarca todos los controles.

    He añadido un ejemplo aquí como el original de la pregunta de Alerta o ActionSheet

    func addAlert(){
    //create the alert
        let title = "This is the title"
    let message = "This is the message"
    var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert);
    alert.modalInPopover = true;
    //add an action button
        let nextAction: UIAlertAction = UIAlertAction(title: "Action", style: .Default){action->Void in
    //do something
        }
    alert.addAction(nextAction)
    //now create our custom view - we are using a container view which can contain other views
        let containerViewWidth = 250
    let containerViewHeight = 120
    var containerFrame = CGRectMake(10, 70, CGFloat(containerViewWidth), CGFloat(containerViewHeight));
    var containerView: UIView = UIView(frame: containerFrame);
    alert.view.addSubview(containerView)
    //now add some constraints to make sure that the alert resizes itself
        var cons:NSLayoutConstraint = NSLayoutConstraint(item: alert.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.GreaterThanOrEqual, toItem: containerView, attribute: NSLayoutAttribute.Height, multiplier: 1.00, constant: 130)
    alert.view.addConstraint(cons)
    var cons2:NSLayoutConstraint = NSLayoutConstraint(item: alert.view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.GreaterThanOrEqual, toItem: containerView, attribute: NSLayoutAttribute.Width, multiplier: 1.00, constant: 20)
    alert.view.addConstraint(cons2)
    //present with our view controller
        presentViewController(alert, animated: true, completion: nil)
    }
    • Gracias, esas restricciones era lo que me faltaba…!
    • Gran hallazgo con la restricción de
  4. 4

    Que necesitaba para hacer lo mismo y esto es cómo lo resolvió. Yo hice algo similar a Jageen. Mi código es el siguiente. Tenga en cuenta que yo ponga los valores en la UIPickerView en una parte diferente de la de código.

    //Need to use an UIAlertController for iOS 8 instead of an action view
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
    message:@"\n\n\n\n\n\n\n\n"
    preferredStyle:UIAlertControllerStyleAlert];
    //Make a frame for the picker & then create the picker
    CGRect pickerFrame = CGRectMake(0, 0, 270, 100);
    UIPickerView *regionsPicker = [[UIPickerView alloc] initWithFrame:pickerFrame];
    //There will be 3 pickers on this view so I am going to use the tag as a way
    //to identify them in the delegate and datasource
    regionsPicker.tag = 1;
    //set the pickers datasource and delegate
    regionsPicker.dataSource = self;
    regionsPicker.delegate = self;
    //set the pickers selection indicator to true so that the user will now which one that they are chosing
    [regionsPicker setShowsSelectionIndicator:YES];
    //Add the picker to the alert controller
    [alert.view addSubview:regionsPicker];
    //make the toolbar view
    UIView *toolView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 270.0f, 44.f)];
    toolView.backgroundColor = [UIColor blackColor]; //set it's background
    
    //add buttons to the view
    CGRect buttonFrame = CGRectMake(0, 5, 100, 30); //size & position of the button as placed on the toolView
    //make the cancel button & set the title
    UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];
    [button setTitle: @"Cancel" forState: UIControlStateNormal];
    [button setTitleColor: [UIColor blueColor] forState: UIControlStateNormal]; //make the color blue to keep the same look as prev version
    [toolView addSubview:button]; //add to the subview
    
    //Add the tartget
    [button addTarget: self
    action: @selector(cancelRegionSet)
    forControlEvents: UIControlEventTouchDown];
    //do the same for the select button
    buttonFrame = CGRectMake(90, 5, 100, 30);
    UIButton *selButton = [[UIButton alloc] initWithFrame:buttonFrame];
    [selButton setTitle:@"Select" forState:UIControlStateNormal];
    [selButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
    [toolView addSubview:selButton];
    [selButton addTarget: self
    action: @selector(dismissRegionSet:)
    forControlEvents: UIControlEventTouchDown];
    //add the toolbar to the alert controller
    [alert.view addSubview:toolView];
    [self presentViewController:alert animated:NO completion:nil];
    • Creo que debo una explicación….
  5. 3

    Creo que no es mala idea comenzar a partir de beta.
    Usted necesita personalizado UIAlertView. Preste atención a UIAlertController es disponible sólo en iOS 8.0.

    Mirada
    allí
    y
    allí

    • Me puedes dar un pequeño ejemplo en swift, porque no me los ejemplos en los enlaces (creo que es porque el exceso de ObjC en que hay 😉 )
    • Creo que se debe empezar desde otro punto de Swift, donde podrás obtener el conocimiento de cómo es el trabajo. Se debe saber cómo convertir código de obj-c a swift, porque obj-c fue «principal» lenguaje de mucho tiempo de iOS como usted sabe, y hay algo de info, marcos, ejemplos de obj-c que te pueden ayudar.
    • Creo que este es el gran problema de apple. Ellos están tratando de hacer muy lenta transición entre el objetivo c y swift, haciendo xcode para trabajar con ambos, para facilitar la obc-c programadores. Pero, ¿qué acerca de la gente a partir de ahora … tienen que aprender 2 lenguajes de programación, debido a que swift no puede trabajar solo, sin obj-c (la mayoría de los marcos en obj-c). Swift no es un lenguaje, es un cierre para el viejo y la vieja y el viejo C y obj-c … o apple acaba de hacer me siento así … tomemos, por ejemplo, Java, C#, PHP, incluso javascript … todos ellos pueden sobrevivir sin el uso de cualquier otro idioma, así que ..
    • Gracias por el consejo para empezar a aprender Swift desde otro punto … Pero este es un consejo para apple – para iniciar la creación de swift desde otro punto. Un punto donde swift puede trabajar independiente. Así Maxim … me gustó tu primer comentario. Es una sugerencia para el inicio de algún lugar … estoy empezando en esta dirección, pero voy a esperar para bether explicación … no te enojes … yo ni siquiera tienen la reputación de elegir la mejor respuesta o el voto para él, así que … a Mantenerse fresco … 😉
    • Guay .. Probablemente es el mismo como con el búlgaro y ruso. Está escrito en ruso, pero puedo entender lo que ha significado 🙂
    • Lo siento. Usted tiene idioma ruso apodo 🙂
    • Es búlgaro … Y he entendido lo que he escrito yo.

  6. 3

    Puede agregar Selector como UIActionSheet en iOS 8 usando Objective-C:-

     colorArray = [[NSMutableArray alloc ]initWithObjects:@"One", @"Two", @"Three", @"Four", @"Five", nil];
    picker = [[UIPickerView alloc]init];
    picker.frame = CGRectMake(0.0, 44.0,self.view.frame.size.width, 216.0);
    picker.dataSource = self;
    picker.delegate = self;
    picker.showsSelectionIndicator = true;
    picker.backgroundColor = [UIColor whiteColor];
    UIToolbar* pickerDateToolbar = [[UIToolbar alloc] initWithFrame: CGRectMake(0, 0, 320, 44)];  //(frame: CGRectMake(0, 0, 320, 44))
    pickerDateToolbar.barStyle =  UIBarStyleBlackTranslucent;//UIBarStyle.Black
    pickerDateToolbar.barTintColor = [UIColor whiteColor];
    pickerDateToolbar.translucent = true;
    actionView.backgroundColor = [UIColor whiteColor];
    UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(150, 5, 150, 20)];
    label.backgroundColor = [UIColor clearColor];
    label.textColor = [UIColor blackColor];
    label.shadowColor = [UIColor blackColor];
    label.shadowOffset = CGSizeMake(0, 1);
    label.font = [UIFont systemFontOfSize:15];//[UIFont boldSystemFontOfSize:15];
    label.text = @"Select a Status";
    UIBarButtonItem *labeltext= [[UIBarButtonItem alloc] initWithCustomView:label];
    UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancel_clicked:)];
    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(done_clicked:)];
    pickerDateToolbar.items = [[NSArray alloc] initWithObjects:cancelBtn,flexSpace,labeltext,doneBtn,nil];
    cancelBtn.tintColor = [UIColor blueColor];
    doneBtn.tintColor = [UIColor blueColor];
    [actionView addSubview:pickerDateToolbar];
    [actionView addSubview:picker];
    if (window != nil) {
    [window addSubview:actionView];
    }
    else
    {
    [self.view addSubview:actionView];
    }
    [UIView animateWithDuration:(0.2) animations:^{
    actionView.frame = CGRectMake(0, self.view.frame.size.height - 260.0, self.view.frame.size.width, 260.0);
    self.view.alpha = 0.5;
    actionView.alpha = 1;
    }];

    En ViewDidLoad añadir este,

    UIApplication * delegate = [UIApplication sharedApplication];
    UIWindow *myWindow = delegate.keyWindow;
    NSArray *myWindow2 = delegate.windows;
    if(myWindow == [UIApplication sharedApplication].keyWindow)
    window = myWindow;
    else
    window = myWindow2[0];
    actionView = [[UIView alloc]initWithFrame:CGRectMake(0, UIScreen.mainScreen.bounds.size.height, UIScreen.mainScreen.bounds.size.width, 240.0)];

    //Esto es para Crear ActionView y se desvaneció de fondo cuando el selector se muestra en la ventana emergente.

    -(void)cancel_clicked:(id)sender{
    NSLog(@"cancel clicked");
    [UIView animateWithDuration:0.2 animations:^{
    actionView.frame = CGRectMake(0, UIScreen.mainScreen.bounds.size.height - 260.0, UIScreen.mainScreen.bounds.size.width, 260.0);
    } completion:^(BOOL finished) {
    self.view.alpha = 1;
    [actionView removeFromSuperview];
    }];

    }

    //Cancel Haga Clic En El Método.

    -(void)done_clicked:(id)sender{
    NSLog(@"done clicked");
    self.view.userInteractionEnabled = TRUE;
    [UIView animateWithDuration:0.2 animations:^{
    actionView.frame = CGRectMake(0, UIScreen.mainScreen.bounds.size.height - 260.0, UIScreen.mainScreen.bounds.size.width, 260.0);
    } completion:^(BOOL finished) {
    _permitStatus.text = [colorArray objectAtIndex:[picker selectedRowInComponent:0]];
    self.view.alpha = 1;
    [actionView removeFromSuperview];
    }];

    }

    //Para Hacer Clic De Botón.

  7. 2

    Aquí es un github del proyecto que aparece UIDatePicker en el centro de la pantalla. No utilizar UIAlertController o UIAlertView. No creo que la intención de la alerta de clases.

    • Que es una solución interesante … Un poco complicado … pero pienso que va a ayudar 🙂
  8. 2
    alertController = [UIAlertController alertControllerWithTitle:@" \n\n\n\n\n\n\n\n\n\n"
    message:@""
    preferredStyle:UIAlertControllerStyleActionSheet];
    closePicker = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Cancel"]];
    closePicker.momentary = YES;
    closePicker.frame = CGRectMake(25, 0.0f, 50.0f, 30.0f);
    closePicker.segmentedControlStyle = UISegmentedControlStyleBar;
    closePicker.tintColor = [UIColor blackColor];
    [closePicker addTarget:self action:@selector(dismissActionSheet:) forControlEvents:UIControlEventValueChanged];
    [alertController.view addSubview:closePicker];
    UIPickerView *pickerFiliter=[[UIPickerView alloc]init];
    pickerFiliter = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 40.0, 320.0, 120.0)];
    pickerFiliter.showsSelectionIndicator = YES;
    pickerFiliter.dataSource = self;
    pickerFiliter.delegate = self;
    [alertController.view addSubview:pickerFiliter];
    [self presentViewController:alertController animated:YES completion:nil];
    - (IBAction)dismissActionSheet:(id)sender 
    {
    [alertController dismissViewControllerAnimated:YES completion:nil];
    }
  9. 2

    Swift 4.1 /Xcode 9.4.1 /iOS 11.4

    func addAlert(){
    //create the alert
        let title = "This is the title"
    let message = "This is the message"
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert);
    alert.isModalInPopover = true;
    //add an action button
        let nextAction: UIAlertAction = UIAlertAction(title: "Action", style: .default){action->Void in
    //do something
        }
    alert.addAction(nextAction)
    //now create our custom view - we are using a container view which can contain other views
        let containerViewWidth = 250
    let containerViewHeight = 120
    let containerFrame = CGRect(x:10, y: 70, width: CGFloat(containerViewWidth), height: CGFloat(containerViewHeight));
    let containerView: UIView = UIView(frame: containerFrame);
    alert.view.addSubview(containerView)
    //now add some constraints to make sure that the alert resizes itself
        let cons:NSLayoutConstraint = NSLayoutConstraint(item: alert.view, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.greaterThanOrEqual, toItem: containerView, attribute: NSLayoutAttribute.height, multiplier: 1.00, constant: 130)
    alert.view.addConstraint(cons)
    let cons2:NSLayoutConstraint = NSLayoutConstraint(item: alert.view, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.greaterThanOrEqual, toItem: containerView, attribute: NSLayoutAttribute.width, multiplier: 1.00, constant: 20)
    alert.view.addConstraint(cons2)
    //present with our view controller
        present(alert, animated: true, completion: nil)
    }
  10. 1

    Swift 2.0:

    Hacer una muestra pickerview o segmento de ver y añadir uialercontroller la subvista. Implementar uipickerview delegados y presentar el uialertcontroller. Aquí es cómo he conseguido el mismo.

    class ViewController: 
    UIViewController,UIPickerViewDataSource,UIPickerViewDelegate {
    var samplePicker: UIPickerView = UIPickerView()
    var sampleSegment:UISegmentedControl = UISegmentedControl ()
    var alertController:UIAlertController = UIAlertController()
    var buildings:[String] = ["BankBuilding", "Cinema" , "CornerShop", "Greg's House","14th Street"]
    override func viewDidLoad() {
    super.viewDidLoad()
    samplePicker = UIPickerView(frame: CGRectMake(10.0, 40.0, 250, 150))
    samplePicker.delegate =  self;
    samplePicker.dataSource = self;
    samplePicker.showsSelectionIndicator = true
    samplePicker.tintColor =  UIColor.redColor()
    samplePicker.reloadAllComponents()
    sampleSegment = UISegmentedControl(items: NSArray(object: "  Dismiss ") as [AnyObject])
    sampleSegment.momentary = true
    sampleSegment.frame = CGRectMake(25, 10.0, 100.0, 30.0)
    sampleSegment.tintColor = UIColor.blackColor()
    sampleSegment.backgroundColor = UIColor.orangeColor()
    sampleSegment.addTarget(self, action: "dismissAlert", forControlEvents: UIControlEvents.ValueChanged)
    }
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
    }
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return 3
    }
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return buildings[row] as String
    }
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    print(buildings[0])
    }
    func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
    return 36.0
    }
    override func viewDidAppear(animated: Bool)
    {
    alertController = UIAlertController(title: " \n\n\n\n\n\n\n\n\n\n", message: "", preferredStyle: UIAlertControllerStyle.Alert)
    alertController.view.addSubview(sampleSegment)
    alertController.view.addSubview(samplePicker)
    self.presentViewController(alertController, animated: true, completion: nil)
    }
    func dismissAlert()
    {
    alertController.dismissViewControllerAnimated(true, completion: nil)
    }
    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    }
    }
  11. 1

    Swift 3.0:

    func showPickerInActionSheet() {
    let title = ""
    let message = "\n\n\n\n\n\n\n\n\n\n";
    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.actionSheet);
    alert.isModalInPopover = true;
    //Create a frame (placeholder/wrapper) for the picker and then create the picker
        let pickerFrame = CGRect(x: 17, y: 52, width: 270, height: 100)
    let picker: UIPickerView = UIPickerView(frame: pickerFrame)
    //set the pickers datasource and delegate
        picker.delegate   = self
    picker.dataSource = self
    //Add the picker to the alert controller
        alert.view.addSubview(picker)
    //Create the toolbar view - the view witch will hold our 2 buttons
        let toolFrame = CGRect(x: 17, y: 5, width: 270, height: 45)
    let toolView: UIView = UIView(frame: toolFrame)
    //add buttons to the view
        let buttonCancelFrame = CGRect(x: 0, y: 7, width: 100, height: 30) //size & position of the button as placed on the toolView
    
    //Create the cancel button & set its title
        let buttonCancel: UIButton = UIButton(frame: buttonCancelFrame);
    buttonCancel.setTitle("Cancel", for: .normal)
    buttonCancel.setTitleColor(UIColor.blue, for: .normal)
    toolView.addSubview(buttonCancel); //add it to the toolView
    
    //Add the target - target, function to call, the event witch will trigger the function call
        buttonCancel.addTarget(self, action: Selector("cancelSelection:"), for: UIControlEvents.touchDown);
    //add buttons to the view
    
    let buttonOkFrame = CGRect(x: 170, y: 7, width: 100, height: 30)//size & position of the button as placed on the toolView
    
    //Create the Select button & set the title
        let buttonOk: UIButton = UIButton(frame: buttonOkFrame);
    buttonOk.setTitle("Select", for: UIControlState.normal);
    buttonOk.setTitleColor(UIColor.blue, for: UIControlState.normal);
    toolView.addSubview(buttonOk); //add to the subview
    
    buttonOk.addTarget(self, action: #selector(HomeViewController.saveDelayTime), for: UIControlEvents.touchDown);
    //add the toolbar to the alert controller
        alert.view.addSubview(toolView);
    self.present(alert, animated: true, completion: nil);
    }
    func saveProfile(sender: UIButton){
    //Your code when select button is tapped
    
    }
    func saveUser(sender: UIButton){
    //Your code when select button is tapped
    }
    func cancelSelection(sender: UIButton){
    self.dismiss(animated: true, completion: nil)
    //We dismiss the alert. Here you can add your additional code to execute when cancel is pressed
    }
    //returns number of rows in each component..
    func numberOfComponents(in pickerView: UIPickerView) -> Int{
    return 1
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return 60
    }
    //Return the title of each row in your picker ... In my case that will be the profile name or the username string
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return "\(row)"
    }
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    selectedTime = row
    }
    func saveDelayTime() {
    self.dismiss(animated: true, completion: nil)
    UserDefaults.standard.set(selectedTime, forKey: "DelayTimeKey")
    let _ = UserDefaults.standard.synchronize()
    }

Dejar respuesta

Please enter your comment!
Please enter your name here