Domanda

Conosco la documentazione SDK dice

.

Rubinetti al di fuori del contenuto della popover respingono automaticamente il popover.

Ma sono sicuro che le persone intelligenti qui trovò un modo :) Forse dovrei sovrascrivere la funzione di licenziamento di Popover?

Grazie

Modifica: Ho provato a utilizzare il passHoughs come è stato suggerito qui, e funziona perfettamente.Ecco il codice per chi ha bisogno - in questo esempio, ho messo Self.View nell'array, il che significa che dove mai al di fuori del pulsante in cui è stato originato il Popover, nulla ha respinto il Popover.

        popoverController.passthroughViews = [[[NSArray alloc] initWithObjects:self.view, nil] autorelease];
.

È stato utile?

Soluzione

È necessario impostare la proprietà passthroughViews.Dalla documentazione:

.

Una serie di viste che l'utente può interagire con mentre il Popover è visibile.

@property (nonatomic, copy) NSArray *passthroughViews

Quando un avover è attivo, le interazioni con altre viste sono normalmente disabilitate fino a quando il popover è stato respinto.L'assegnazione di una serie di viste su questa proprietà consente ai rubinetti al di fuori del Popover da gestire dalle viste corrispondenti.

Impostare passthroughViews in una serie di view (s) che si desidera gestire l'evento touch anziché aver appena licenziato il Popover.

Altri suggerimenti

La risposta accettata non risponde davvero alla domanda, "c'è un modo per non avere il popover licenziato quando si preme fuori?", IMO.Dà una possibile vista ma potrebbe richiedere l'accesso hackish a tutte le viste dei genitori e determinare quali punti di vista sullo schermo ecc. La domanda potrebbe essere riformulata come, "Come faccio a fare una vista di Popoover?"

Lo faresti così come, con un pulsante DONE per chiudere il Popover:

UIViewController* vc = [[[UIViewController alloc] init] autorelease];

UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done"] style:UIBarButtonItemStyleDone target:self action:@selector(processDoneAction)] autorelease];

[vc.navigationItem setLeftBarButtonItem:doneButton];

vc.modalInPopover = YES;
//If you want full screen:
vc.modalPresentationStyle = UIModalPresentationFullScreen;
vc.wantsFullScreenLayout = YES;

UINavigationController* navC = [[[UINavigationController alloc] initWithRootViewController:vc] autorelease];

UIView* view = create your view

vc.view = view;

UIPopoverController* pc = [[[UIPopoverController alloc] initWithContentViewController:navC] autorelease];
pc.delegate = self;
self.popoverController = pc;
.

Allora, nel tuo metodo di process-rosichi, dovrai respingere il Popover.Altre considerazioni liquideranno e ridistribuiranno i cambiamenti di orientamento del dispositivo, ma lo lascerò a un altro esercizio in quanto è stato risposto in precedenza su Stackoverflow.

C'è una soluzione molto semplice e legittima.Nel controller di visualizzazione che presenta il tuo UIPopoverController, conforme al protocollo UIPopoverControllerDelegate e implementò il seguente metodo delegato.Ho appena provato questo e impedisce il salto di licenziare.

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
    return NO;
}
.

Assicurarsi di aver impostato il delegato del tuo controller di Popover sul controller di visualizzazione che implementa questo.

È possibile ignorare il Popover utilizzando il metodo [popoverController dismissPopoverAnimated:NO];.

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