2011-01-22 25 views
34

Come posso implementare questo menu popup nell'app per iphone come un popover in ipad?menu popup iPhone come popover iPad?

alt text


EDIT: Questa è la migliore al momento: https://github.com/runway20/PopoverView enter image description here

+1

@ Kev si chiude la mia domanda perché non è una vera e propria domanda? Dopo 12439 visualizzazioni? e molti commenti/risposte? È così strano come una domanda? Maahh. – elp

+5

Secondo me questa è una domanda perfettamente valida. –

+0

Grazie per riferimento !!! –

risposta

21

Dai un'occhiata alla realizzazione iPhone UIPopoverController: WEPopover

+0

Grazie. Sai se usare WEPopover nella mia app è ok se voglio metterlo sullo Store? – Luke47

+0

Dovrebbe essere. Non conosco i dettagli da quando un collega ha eseguito l'implementazione, ma ne abbiamo una versione modificata nella nostra app live. – clozach

+0

[Suragch's answer below] (http://stackoverflow.com/a/32295907/4106164) è ora il modo standard per farlo dopo iOS 8. – Gordonium

19

Su iPhone si sarebbe generalmente utilizzare un UIActionSheet per una pila di bottoni del genere. Scorre verso l'alto dal basso, piuttosto che spuntare vicino al pulsante, ma questo è il comportamento standard su iPhone.

+1

uhm ... come posso implementarlo?PS: lo screenschot in alto proviene da iphone app! – elp

+0

@Paska: quale app per iPhone è questa? sono curioso – user102008

+0

@ user102008 Non ricordo, ma è una vista con l'angolo arrotondato e un'immagine della freccia! Niente di così facile! – elp

0

Lo screenshot qui sopra non è un UIActionSheet. Sembra una sottoclasse UIView semplice con UIButtons personalizzati su di esso. Quindi vai avanti e crea la sottoclasse in base alle tue esigenze e poi aggiungila sotto forma di visualizzazione secondaria alla tua visualizzazione ogni volta che ne hai bisogno.

5

È necessario creare manualmente un'istanza di un UIView utilizzando un'immagine di sfondo personalizzata o un disegno con trasparenza, aggiungere alcuni UIButtons (o un altro tipo di visualizzazione personalizzata) in alto e gestire in qualche modo tutti i tocchi all'esterno di tale vista.

Nota che è l'interfaccia utente non standard. Un foglio di azione sarebbe più conforme a HIG.

7

C'è uno che è anche meglio di WEPopover. Sviluppato da una società chiamata 50pixels, si chiama FPPopover.

È possibile scaricare FPPopover a https://github.com/50pixels/FPPopover

+1

Questo non funziona con 'UIBarButtonItems' (nella mia esperienza limitata comunque) – Matthew

+2

Ha anche un sacco di problemi di memoria registrati – jjxtra

26

iOS 8 e versioni successive

Cominciando con iOS 8, è possibile utilizzare UIPopoverPresentationController per iPhone, oltre a iPad.

enter image description here

Setup

  • Aggiungi un UIBarButtonItem al controller principale View.
  • Aggiungi un altro controller di visualizzazione allo storyboard. Cambialo alla dimensione che vuoi che il popover sia e aggiungi qualsiasi contenuto che vuoi che abbia. Per il mio esempio ho appena aggiunto uno UILabel. Se vuoi un intero menu, aggiungi solo una vista tabella o un elenco di pulsanti.
  • Aggiungere un passaggio dall'elemento del pulsante della barra al controller della vista che verrà utilizzato come popover. Piuttosto che show, scegli Present as Popover.

enter image description here

  • Selezionare la segue nello storyboard e impostare l'identificatore di popoverSegue (o qualsiasi stringa che si chiama nel codice).

enter image description here

  • Nel Attributi per il controller della vista popover, controllare Usa preferito specificare la dimensione del e confermare che è la dimensione che si desidera che sia.

enter image description here

Codice

Questo è il codice per il principale controller della vista che ha la voce di pulsante della barra in esso.

class ViewController: UIViewController, UIPopoverPresentationControllerDelegate { 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "popoverSegue" { 

      let popoverViewController = segue.destinationViewController 
      popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover 
      popoverViewController.popoverPresentationController!.delegate = self 

     } 
    } 

    // MARK: - UIPopoverPresentationControllerDelegate method 

    func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { 

     // Force popover style 
     return UIModalPresentationStyle.None 
    } 
} 

Popover ad un arbitrario punto di ancoraggio

Se si desidera impostare il popover ad apparire da qualche parte oltre un elemento pulsante della barra (su un UIButton per esempio), allora è necessario impostare il sourceView e sourceRect. Vedi this answer per i dettagli.

enter image description here

Letture

L'esempio proviene principalmente dal primo collegamento.

+3

Questa dovrebbe essere la risposta accettata ora – Crashalot

0

Per ottenere un popover da una barra oggetto pulsante laterale destro su un controller di navigazione che fa parte di un controllore Tableview, la seguente ha funzionato per me per Swift 4 e Xcode 9.

  1. seguire i passaggi della Suragch risposta di cui sopra (come modificata dalla Comunità.)
  2. non implementano il Segue come indicato nella risposta precedente. Per qualche ragione, il seguito fa sì che il popover vada a schermo intero nonostante abbia impostato la dimensione esplicita.
  3. Assegna un titolo al controller di visualizzazione popover in Attributes Inspector
  4. Aggiungere il seguente codice nel controller TableView in cui verrà visualizzato il popup.
  5. Modificare l'identificatore di stringa (quella qui fa riferimento a un file di Constant.swift)
  6. Modifica "come! FilterVC", per usare il titolo del vostro controller della vista popover.

    /// Shows a filter popover view 
    @IBAction func filterBtnPressed(_ sender: UIBarButtonItem) { 
        let popover = storyboard?.instantiateViewController(withIdentifier: FILTER_VC) as! FilterVC 
        popover.modalPresentationStyle = UIModalPresentationStyle.popover 
        popover.popoverPresentationController?.backgroundColor = UIColor.green 
        popover.popoverPresentationController?.delegate = self 
        popover.popoverPresentationController?.backgroundColor = ColorPalette.Blue.Medium 
        popover.popoverPresentationController?.sourceView = self.view 
        popover.popoverPresentationController?.sourceRect = CGRect(x: self.view!.bounds.width, y: 0, width: 0, height: 0) 
        popover.popoverPresentationController?.permittedArrowDirections = .up 
        self.present(popover, animated: true) 
    } } 
    
    
    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { 
        return UIModalPresentationStyle.none 
    } 
    
Problemi correlati