2011-07-12 7 views
6

che sto visualizzando un popover con il controller della vista contenuta avere l'insieme di proprietà modalInView. Ho bisogno che l'utente inserisca una risposta qui prima di continuare.Come posso disattivare la barra degli strumenti principale durante la visualizzazione di un popover utilizzando modalInPopover?

Anche se questo disabilita gran parte dei miei controlli dell'interfaccia utente, lo fa disabilitare i pulsanti della barra degli strumenti l'applicazione principale. Non voglio che l'utente interagisca con l'applicazione prima di selezionare un oggetto nel popover e chiuderlo.

mi sto perdendo qualcosa di intelligente qui - vale a dire che avrebbe disattivare la barra degli strumenti di default? Perché rimane attivo? Esistono linee guida per l'interfaccia utente che lo richiedono?

devo solo impostare la barra degli strumenti per non consentire interazione con l'utente, o è quello disordinato?

risposta

1

Quello che ho trovato lavoro migliore è quello che si parla come possibilità nella sua domanda:

-(void)showMyPopover 
{ 
    .... 
    self.myToolBar.userInteractionEnabled=NO; 
    [self.myPopover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES] 
} 

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 
{ 
    self.myToolBar.userInteractionEnabled=YES; 
    ... 
} 
6

Sembra che iOS aggiunge il bar come una "vista passthrough" per la popover, quando lo presentano da UIBarButtonItem.

Basta impostare a zero passthroughViews proprietà di UIPopoverController dopo aver presentato, in questo modo:

[self.myPopover presentPopoverFromBarButtonItem:some_item permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
dispatch_async(dispatch_get_main_queue(), ^{ self.myPopover.passthroughViews = nil; }); 
+0

Grazie! Mi ha salvato :) – mohamede1945

+0

Lifesaver, di sicuro. Non riesco nemmeno a concepire perché Apple lo faccia di default, dato che è un crash garantito ogni volta che tocchi di nuovo il pulsante della barra. – MusiGenesis

+0

Su iOS8 è necessario impostare il passthroughViews in un altro runloop per farlo funzionare. Maggiori info [qui] (http://blog.karmeye.com/2014/11/20/ios8-popovers-and-passthroughviews/). – Karmeye

2

Usa -[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated] invece, che non consente l'interazione barra degli strumenti per impostazione predefinita. Ad esempio, se si presenta da un UIBarButtonItem con un set di proprietà customView:

[barButtonItem presentPopoverFromRect:barButtonItem.customView.bounds inView:barButtonItem.customView permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];`