2015-05-16 9 views
20

Impossibile trovare una spiegazione chiara e informativa per questo.Dove trovare una spiegazione chiara sull'allarme rapido (UIAlertController)?

+6

formato L'Stack Overflow richiede una domanda. Se vuoi rispondere alla tua stessa domanda, puoi, ma prima devi fare una domanda. Riformatta il tuo post nella forma della domanda a cui stavi cercando di trovare una risposta, quindi sposta il post in alto alla risposta. – vacawama

+0

È possibile utilizzare un 'UIAlertController' per un avviso e un foglio di azione. Trovo gli esempi il modo più semplice per capire come funzionano le cose. Ecco un [esempio di avviso] (https://stackoverflow.com/a/33340757/3681880) ed ecco un [esempio di foglio di azione] (https://stackoverflow.com/a/32991999/3681880). – Suragch

risposta

61

Dopo aver cercato un po 'su un argomento non ho trovare una spiegazione chiara, anche nella sua classe di riferimento UIAlertController Reference

E' ok, ma non abbastanza chiaro per me.

Così, dopo aver raccolto alcune paci ho deciso di fare la mia spiegazione (Speranza che aiuta)

Quindi qui si va:

  1. UIAlertView è deprecato come sottolineato: UIAlertView in Swift
  2. UIAlertController dovrebbe essere usato in iOS8 + quindi per crearne uno occorre prima istanziarlo, il Costruttore (init) ottiene 3 parametri:
  3. .515.053.691,36321 milioni

2.1 titolo: String -> text big-in grassetto per visualizzare sulla parte superiore della finestra di dialogo di avviso

2.2 messaggio: String -> testo più piccolo (praticamente spiega, di per sé)

2,3 prefferedStyle:UIAlertControllerStyle - > definire lo stile finestra di dialogo, nella maggior parte dei casi: UIAlertControllerStyle.Alert

  1. ora mostrare in realtà per l'utente, possiamo utilizzare showViewController o presentViewController e passare il nostro avviso come parametro di

  2. Per aggiungere un po 'di interazione con l'utente che possiamo utilizzare:

4,1 UIAlertController.addAction per creare pulsanti

4.2 UIAlertController.addTextField per creare campi di testo

Modifica nota: esempi di codice qui sotto, aggiornato per SWIFT 3 sintassi

Esempio 1: semplice finestra di dialogo

@IBAction func alert1(sender: UIButton) { 
    //simple alert dialog 
    let alert=UIAlertController(title: "Alert 1", message: "One has won", preferredStyle: UIAlertControllerStyle.alert); 
    //show it 
    show(alert, sender: self); 
} 

Esempio 2: Dialogo con un testo di input Campo & due pulsanti

@IBAction func alert2(sender: UIButton) { 
    //Dialog with one input textField & two buttons 
    let alert=UIAlertController(title: "Alert 2", message: "Two will win too", preferredStyle: UIAlertControllerStyle.alert); 
    //default input textField (no configuration...) 
    alert.addTextField(configurationHandler: nil); 
    //no event handler (just close dialog box) 
    alert.addAction(UIAlertAction(title: "No", style: UIAlertActionStyle.cancel, handler: nil)); 
    //event handler with closure 
    alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: {(action:UIAlertAction) in 
     let fields = alert.textFields!; 
     print("Yes we can: "+fields[0].text!); 
    })); 
    present(alert, animated: true, completion: nil); 
} 

Esempio 3: Una misura textField ingresso & un pulsante

@IBAction func alert3(sender: UIButton) { 
    // one input & one button 
    let alert=UIAlertController(title: "Alert 3", message: "Three will set me free", preferredStyle: UIAlertControllerStyle.alert); 

    //configured input textField 
    var field:UITextField?;// operator ? because it's been initialized later 
    alert.addTextField(configurationHandler:{(input:UITextField)in 
     input.placeholder="I am displayed, when there is no value ;-)"; 
     input.clearButtonMode=UITextFieldViewMode.whileEditing; 
     field=input;//assign to outside variable(for later reference) 
    }); 
    //alert3 yesHandler -> defined in the same scope with alert, and passed as event handler later 
    func yesHandler(actionTarget: UIAlertAction){ 
     print("YES -> !!"); 
     //print text from 'field' which refer to relevant input now 
     print(field!.text!);//operator ! because it's Optional here 
    } 
    //event handler with predefined function 
    alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: yesHandler)); 

    present(alert, animated: true, completion: nil); 
} 

Speranza che aiuta, e buona fortuna ;-)

+2

Sono felice che tu abbia condiviso ciò che hai imparato !! grazie mille per la spiegazione passo per passo .. mi piace pensare;) – swiftBoy

+0

http://iosdevcenters.blogspot.in/2016/03/uialertcontroller-in-swift.html –

+0

Sto correndo su Xcode 7.3.1 e test su iOS9 . Quando si usa showViewController (alert, sender: self) dal primo esempio con UINavigationController (senza che sia ok) stavo diventando strano comportamento. Aggiunge la vista di avviso alla barra di navigazione. L'utilizzo di self.presentViewController (alert, animato: true, completion: nil) funziona correttamente. – pls

10

Un'istanza della UIAlertController può essere presentata in modo modale sullo schermo come qualsiasi altro UIViewController che usa il presentViewController: animated: completion: method. Ciò che distingue l'istanza di UIAlertController dal lavoro come ActionSheet o da AlertView è il parametro di stile che si passa al momento della sua creazione.

Non più la delega

se si è usato un UIActionSheet o UIAlertView, si sa che il modo per ottenere un callback da essa è per una classe (nella maggior parte dei casi la ViewController) per implementare il protocollo UIActionSheetDelegate o UIAlertViewDelegate. Esistono alcuni progetti open source che hanno sostituito questo modello di delega con callback basati su blocchi, ma le API ufficiali non sono mai state aggiornate. UIAlertController non utilizza la delega. Al contrario, ha una collezione di oggetti UIAlertAction, che usano chiusure (o blocchi se si utilizza Objective-C) per gestire l'input dell'utente.

Per Azione Foglio

@IBAction func showActionSheet(sender: AnyObject) { 
    //Create the AlertController 
    let actionSheetController: UIAlertController = UIAlertController(title: "Action Sheet", message: "Swiftly Now! Choose an option!", preferredStyle: .ActionSheet) 

    //Create and add the Cancel action 
    let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in 
    //Just dismiss the action sheet 
    } 
    actionSheetController.addAction(cancelAction) 
    //Create and add first option action 
    let takePictureAction: UIAlertAction = UIAlertAction(title: "Take Picture", style: .Default) { action -> Void in 
    //Code for launching the camera goes here 
    } 
    actionSheetController.addAction(takePictureAction) 
    //Create and add a second option action 
    let choosePictureAction: UIAlertAction = UIAlertAction(title: "Choose From Camera Roll", style: .Default) { action -> Void in 
    //Code for picking from camera roll goes here 
    } 
    actionSheetController.addAction(choosePictureAction) 

    //Present the AlertController 
    self.presentViewController(actionSheetController, animated: true, completion: nil) 
} 

Per AlertView con campo di testo

@IBAction func showAlert(sender: AnyObject) { 
    //Create the AlertController 
    let actionSheetController: UIAlertController = UIAlertController(title: "Alert", message: "Swiftly Now! Choose an option!", preferredStyle: .Alert) 

    //Create and add the Cancel action 
    let cancelAction: UIAlertAction = UIAlertAction(title: "Cancel", style: .Cancel) { action -> Void in 
    //Do some stuff 
    } 
    actionSheetController.addAction(cancelAction) 
    //Create and an option action 
    let nextAction: UIAlertAction = UIAlertAction(title: "Next", style: .Default) { action -> Void in 
    //Do some other stuff 
    } 
    actionSheetController.addAction(nextAction) 
    //Add a text field 
    actionSheetController.addTextFieldWithConfigurationHandler { textField -> Void in 
     //TextField configuration 
    textField.textColor = UIColor.blueColor() 
    } 

    //Present the AlertController 
    self.presentViewController(actionSheetController, animated: true, completion: nil) 
} 
+0

Grazie per il contributo, anche io ho già risposto a un anno e mezzo fa. Ancora la sua risposta molto bella quindi ho votato volentieri ;-) BTW, puoi anche mostrare l'avviso con il metodo showViewController - meno flessibile, ma ha senso quando il completamento non è necessario –

+0

Se mostrare un avviso richiede così tanto lettura? NO. – chrisl08

1

Alcuni di sintassi è cambiato dal momento che le risposte originali. Ecco alcuni esempi di codice che avvisano l'utente se non hanno effettuato l'accesso a iCloud.

CKContainer.default().accountStatus { (accountStatus, error) in 
 
      switch accountStatus { 
 
      case .available: 
 
       print("iCloud Available") 
 
      case .noAccount: 
 
       print("No iCloud account") 
 
       //simple alert dialog 
 
       let alert=UIAlertController(title: "Sign in to iCloud", message: "This application requires iClound. Sign in to your iCloud account to write records. On the Home screen, launch Settings, tap iCloud, and enter your Apple ID. Turn iCloud Drive on. If you don't have an iCloud account, tap Create a new Apple ID", preferredStyle: UIAlertControllerStyle.alert); 
 
       //no event handler (just close dialog box) 
 
       alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel, handler: nil)); 
 
       //show it 
 
       self.present(alert, animated: true, completion: nil) 
 
      case .restricted: 
 
       print("iCloud restricted") 
 
      case .couldNotDetermine: 
 
       print("Unable to determine iCloud status") 
 
      } 
 
     }

Problemi correlati