2012-02-26 10 views
12

Supponiamo di avere uno storyboard contenente una vista contenente un pulsante. Quando l'utente preme questo pulsante, viene visualizzato un popover.C'è un modo per selezionare un ancoraggio di sequenza in modo programmatico?

Quindi, ho bisogno di impostare un ancoraggio trascinando il seguito al pulsante utilizzando Xcode (e quindi fare performSegueWithIdentifier:).

Quindi, la mia domanda è: c'è un modo per impostare questo "ancoraggio" a livello di programmazione?

Grazie.

risposta

14

Nel mio caso ho aggiunto più UIBarButtonItem a livello di codice. Il problema di usare solo una vista invisibile come un archor è che, se come nel mio caso, la dimensione di UIBarButtonItem sta cambiando le sue dimensioni, la freccia del popover non appare centrata, e sebbene funzioni, sembra un po 'strana.

Come risolverlo.

Creare una vista piccola nello storyboard (la dimensione non ha molta importanza), renderla invisibile e collegarla. Nel mio caso si chiama invisibleViewAsArchor

Collegare l'elemento UIBarbutton con la seguente azione.

-(IBAction) showMyPopover:(id)sender { 
    if([self.popoverController isPopoverVisible]) 
    {  
     [self.popoverController dismissPopoverAnimated:YES]; 
    }else{ 
     self.invisibleViewAsArchor.frame = CGRectMake([sender view].frame.origin.x, 
                  [sender view].frame.origin.y-50, 
                  [sender view].frame.size.width, 
                  [sender view].frame.size.height); 

     [self performSegueWithIdentifier:@"segue_to_something" sender:self]; 
    } 
} 

come si può vedere prima che mostra la popover (con performSegueWithIdentifier), sto cambiando il telaio del Archor con i valori del pulsante che ha generato l'evento.

Spero che aiuti.

+0

Hi @GUiLTY, quindi sto avendo lo stesso problema . Mi chiedevo se "invisibleViewAsArchor" è una classe che devo fare per quella vista? – gdubs

+0

Hi @gdubs "invisibleViewAsAnchor" è una visualizzazione standard e dentro - (void) {viewDidLoad \t // dopo il codice ... \t self.invisibleViewAsArchor.nascosto = TRUE; } – MiQUEL

+2

Ottimizzazione piccola (piccola): non è necessario il "ritorno" lì dentro :) – narco

1

Ho avuto lo stesso problema in cui stavo creando un oggetto BarButtonItem a livello di codice. Potresti anche essere in grado di aggirarlo creando un pulsante invisibile e disabilitato che puoi impostare come ancoraggio in IB.

1

Nello storyboard ancorare il popover a un pulsante arbitrario. Non preoccuparti troppo di quale, dato che verrà sovrascritto nel codice.

Nel metodo View Controller prepareForSegue, aggiungere il codice:

let dest = segue.destinationViewController 
dest.popoverPresentationController?.barButtonItem = <your bar button here> 

o se si vuole ancorare a una visione, invece

dest.popoverPresentationController?.barButtonItem = nil 
dest.popoverPresentationController?.sourceView = <your view here> 
Problemi correlati