2015-01-23 8 views
12

Sono in procinto di riscrivere la mia app dall'obiettivo c a Swift e ho notato che UIActionSheet si comporta in modo diverso nella versione Swift rispetto alla versione obj-c.UIActionSheet in swift puts Annulla pulsante in alto su iOS 7

Obj-C Versione

enter image description here

versione Swift

enter image description here

Questo è un problema solo su iOS 7, funziona benissimo (che significa la annullare è sul fondo) su iOS 8 per entrambe le versioni Swift e Obj-c

Di seguito è riportato il codice rilevante:

var sheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: nil) 
sheet.addButtonWithTitle("Camera") 
sheet.addButtonWithTitle("Photo Library") 
sheet.showInView(self.controller.view) 

Qualche idea su come risolverlo?

risposta

19

Si è scoperto che questo era l'ennesimo caso di trovare una risposta subito dopo aver posto la domanda.

Tutto quello che dovevo fare era aggiungere pulsante Annulla come un altro tasto e quindi specificare il suo indice:

var sheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil) 
sheet.addButtonWithTitle("Camera") 
sheet.addButtonWithTitle("Photo Library") 
sheet.addButtonWithTitle("Cancel") 
sheet.cancelButtonIndex = 2 
sheet.showInView(self.controller.view) 

Non so se hanno cambiato il modo in cui UIActionSheet dovrebbe funzionare a Swift o se si tratta di bug che nessuno si preoccupa di risolvere dal momento che è deprecato in iOS 8 comunque

+1

questo è pazzo, ma aiuta. Grazie! –

0

Ecco quello che ho sul viewDidLoad() o sull'atto tasto messo il codice come questo:

let actionSheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: "Cancel", destructiveButtonTitle: "Done", otherButtonTitles: "Yes", "No") 
      actionSheet.showInView(self.view) 

quindi aggiungere un'altra funzione per le loro azioni come questa:

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) 
    { 
     switch buttonIndex{ 

     case 0: 
      NSLog("Done"); 
      break; 
     case 1: 
      NSLog("Cancel"); 
      break; 
     case 2: 
      NSLog("Yes"); 
      break; 
     case 3: 
      NSLog("No"); 
      break; 
     default: 
      NSLog("Default"); 
      break; 
      //Some code here.. 

     } 

    } 
Problemi correlati