Domanda

Supponiamo di avere uno storyboard contenente una vista che contiene un pulsante. Quando l'utente preme questo pulsante, viene visualizzato un popover.

Pertanto, devo impostare un'ancora trascinando il segnale sul pulsante usando Xcode (e poi fare PerformSuewithIdentifier:).

Quindi, la mia domanda è: c'è un modo per impostare questa "ancora"?

Grazie.

È stato utile?

Soluzione

Nel mio caso ho aggiunto a livello di programmazione diversi UibarButtonItem. Il problema di usare solo una visione invisibile come Archor è che, se come nel mio caso, le dimensioni di UibarbuttonItem sta cambiando le sue dimensioni, la freccia del popover non sembra centrata e, anche se funziona, sembra un po 'strana.

Come risolverlo.

Crea una piccola vista nello storyboard (la dimensione non conta davvero), rendila invisibile e collegalo. Nel mio caso questo si chiama InvisibleViewasarchor

Collega l'articolo UiBarButton con l'azione di follow.

-(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 puoi vedere prima che mostri il popover (con performSeguewithIdentifier), sto cambiando il frame dell'archor con i valori dal pulsante che ha sparato l'evento.

Spero che sia d'aiuto.

Altri suggerimenti

Nello storyboard ancora il popolo di un pulsante arbitrario. Non preoccuparti troppo di quale verrà annullato nel codice.

Nel metodo del controller Visualizza preparare FORSEGUE, Aggiungi il codice:

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

o se si desidera anch'esso alla vista

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

Non puoi creare a livello di programmazione Segue's come spiegato qui: Creazione di un seguito a livello di programmazione, tuttavia, è possibile configurare quale controller di destinazione si desidera visualizzare in tempo di esecuzione. Questo è spiegato nella documentazione di Apple qui: Configurazione del controller di destinazione quando viene attivato un seguito.

Spero che questo aiuti!

Ho avuto lo stesso problema in cui stavo creando un barbuttonItem a livello di programmazione. Potresti anche essere in grado di aggirarlo creando un pulsante invisibile e disabilitato che è possibile impostare come ancora in IB.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top