2014-09-12 23 views
8

Sto usando UIPopoverController in iOS 8 iPad per imagepicker .Il suo lavoro in iOS 7 ma non in iOS 8.The popover non viene visualizzato e popoverControllerDidDismissPopover è chiamato immediatamente quello suggerire una soluzione .. Ecco il codice sto usando:UIPopoverController non presenta in iPad iOS 8

UIPopoverController *popVC= [[UIPopoverController alloc] initWithContentViewController:pickerController]; 
_pop = popVC; 
_pop.delegate = self; 
[_pop presentPopoverFromRect:attachBtnFrame inView:_sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO]; 

Thanks ..

risposta

22

finalmente trovato la soluzione: Presente il Popover nel thread principale come di seguito.

if([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0) 
{ 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [_pop presentPopoverFromRect:attachBtnFrame inView:_sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO]; 
    }); 
} 
+4

se non volete un ritardo potete usare 'dispatch_async' invece di' dispatch_after' – Bastian

+0

Hey @ap ha funzionato bene per il mio caso, +1. –

+0

Questo non funziona per me. Funziona ancora per te in iOS 8.1.1 ?? – zezba9000

5

Mettere questo metodo nella appDelegate.m

+(BOOL)isIOS8 

{ 
    NSString* version=[[UIDevice currentDevice] systemVersion]; 
    if ([version integerValue]>=8.0) 
    { 
     return YES; 
    } 
    else 
    { 
     return NO; 
    } 
} 

ora, quando si desidera utilizzare PopoverController basta controllare OS sistema con il metodo di cui sopra, come

if([AppDelegate isIOS8]) 

di utilizzare questo metodo

if([AppDelegate isIOS8]) 
     { 
      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), 
       ^{[self.popover presentPopoverFromRect:popoverRect 
               inView:self.view 
          permittedArrowDirections:UIPopoverArrowDirectionUp 
              animated:YES];}); 
     } 
     else 
     { 
      [self.popover presentPopoverFromRect:popoverRect 
              inView:self.view 
         permittedArrowDirections:UIPopoverArrowDirectionAny 
             animated:YES ]; 
     } 

questo metodo funziona per me molto bene e dovrebbe funzionare per voi ...

Problemi correlati