7

Voglio mostrare UIPickerView in UIAlertController o UIPopoverController, sono nuovo ad iOS, per favore dammi qualche esempio di codice qui.vuoi mostrare UIPickerView in UIAlertController o UIPopoverController Swift?

Ho cercato per loro ma non riesco a trovare risposte soddisfacenti. Non voglio farlo su UIActionSheet, perché è deprecato in iOS 9. Inoltre lo voglio in Swift non in Obj-C. Ho provato l'esempio di seguito ma non funziona per me.

http://makeapppie.com/2014/08/30/the-swift-swift-tutorials-adding-modal-views-and-popovers/

+0

Si prega di fare una recensione: http://stackoverflow.com/questions/25545982/is-there-any-way-to-add-uipickerview-into-uialertcontroller-alert-or-actionshee –

+0

nell'esempio sopra, "Profili" danno errore. non funziona per me. –

+0

I miei amici, "profilo", "utente" sono un campo di un'altra fonte. Devi impostare il campo appropriato di esso o rimuoverli. –

risposta

2

il codice seguente è per UIAertController che mostra uipickerview. in precedenza dà errore con iPad quando lo correggo per iPhone. ora funziona su entrambi. iPad e iPhone.

let alertView = UIAlertController(title: "Select Launguage", message: "\n\n\n\n\n\n\n\n\n\n", preferredStyle: UIAlertControllerStyle.ActionSheet); 
    if !DeviceType.IS_IPAD{ 
    pickerView.center.x = self.view.center.x 
    } 
    alertView.view.addSubview(pickerView) 
    if DeviceType.IS_IPAD{ 
     alertView.popoverPresentationController?.sourceView = self.view 
     alertView.popoverPresentationController?.sourceRect = self.pickerView.bounds 
    } 
    let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil) 

    alertView.addAction(action) 
    presentViewController(alertView, animated: true, completion: nil) 

per selezionare il dispositivo. codici sono al di sotto:

enum UIUserInterfaceIdiom : Int 
{ 
    case Unspecified 
    case Phone 
    case Pad 
} 

struct ScreenSize 
{ 
    static let SCREEN_WIDTH   = UIScreen.mainScreen().bounds.size.width 
    static let SCREEN_HEIGHT  = UIScreen.mainScreen().bounds.size.height 
    static let SCREEN_MAX_LENGTH = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT) 
    static let SCREEN_MIN_LENGTH = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT) 
} 

struct DeviceType 
{ 
    static let IS_IPHONE_4_OR_LESS = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0 
    static let IS_IPHONE_5   = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0 
    static let IS_IPHONE_6   = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0 
    static let IS_IPHONE_6P   = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0 
    static let IS_IPAD    = UIDevice.currentDevice().userInterfaceIdiom == .Pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0 
} 
9

tua base Codice Look Like:

let alert = UIAlertController(title: title, message: message, preferredStyle: .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) // CGRectMake(left), top, width, height) - left and top are like margins 
let picker = 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) 

//Do stuff and action on appropriate object. 

Ti invitiamo a seguito risposta.

Is there any way to add UIPickerView into UIAlertController (Alert or ActionSheet) in Swift?

+0

sto cercando di risolverlo. grazie per la risposta. se funziona per me lo segnerò come risposta corretta, –

+0

@IbadUrRahman, Ok, NP. Se hai bisogno di aiuto, non esitare a contattarmi. Felice codifica! –

+0

aggiungo la vista di selezione per avvisare ma la vista di selezione non viene visualizzata in stato di avviso. vista picker crea volontà e funziona senza avviso ma non funziona con vista di avviso. –

2

Definire pickerView, DataSource e delegare se stessi e cercare di questo codice.

func createAlertView() { 

    let alertView = UIAlertController(title: "", message: "", preferredStyle: UIAlertControllerStyle.Alert) 

    pickerView = UIPickerView(frame: CGRectMake(0, 0, 250, 60)) 
    pickerView?.dataSource = self 
    pickerView?.delegate = self 

    alertView.view.addSubview(pickerView!) 

    let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil) 

    alertView.addAction(action) 
    presentViewController(alertView, animated: true, completion: nil) 
} 

Tutte le altre risposte sono buone, non capisco perché non funzioni per voi. Aggiungi il tuo codice forse possiamo aiutarti.

0

È possibile creare un UIAlertView o UIAlertViewController personalizzati. Questo conterrà il tuo pick-in e qualsiasi altra cosa ti serva nel tuo avviso personalizzato.

Innanzitutto, creare un nuovo file .xib e impostarlo come dimensione dell'avviso. Quindi, inserisci la tua grafica.

Ora creare un file rapido, sottoclasse di UIAlertView e denominarlo come appropriato.

Nuovo> File> Cocoa Touch sottoclasse

(o qualcosa di simile)

Crea file tuo .xib il nome della classe del vostro UIAlertView.

Trascina i tuoi elementi dal file .xib sul nuovo file rapido e assegna loro un nome appropriato.

Ora utilizzare la vista di avviso anziché la vista di avviso predefinita.

0

Se si segue il codice, è possibile vedere che UIAlertController viene utilizzato per visualizzare fogli azione e/o avvisi. Non dovresti aggiungere le subviews a loro modo, non sarai in grado di prevedere se il comportamento verrà influenzato.

Anche da iOS 9 UIPopoverController è obsoleto. Ma in iOS 8 l'UIPopoverPresentationController e il suo delegato vengono introdotti per aiutare a raggiungere ciò che si desidera. (Ulteriori informazioni su di loro here)

Quindi è possibile utilizzarlo per far sì che Picker si mostri come un popover su iPad, ma non su iPhone se non ricordo male.

La linea di fondo è: il modo semplice è, creare una vista personalizzata e implementare il protocollo dei delegati dei popover. Dovrebbe essere abbastanza semplice. Se hai più dubbi su come fare qualcosa lungo la strada, cerca qui in StackOverflow o posta una nuova domanda.