2014-10-14 14 views
6

Utilizzando UIPopovercontroller sotto ios8.0 in iphone funziona bene con questo codice. Ma in ios8 mostra uno schermo bianco.UIPopoverController per iphone in ios8 mostra schermo bianco

Codice:

pickerController = [[UIViewController alloc] init]; 
UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)]; 
[viewV setBackgroundColor:[UIColor clearColor]]; 
popOverController = [[UIPopoverController alloc] initWithContentViewController:pickerController]; 
popOverController.popoverContentSize = CGSizeMake(150, 160); 
[popOverController setDelegate:self]; 

CGRect ImageBtnFrame = [self.view convertRect:sender.frame fromView:self.view];  
[popOverController presentPopoverFromRect:ImageBtnFrame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

Qualsiasi alternativa per iOS 8, hanno bisogno di suggestione.

risposta

2

Prova a utilizzare la nuova API iOS 8 per i popover.

pickerController = [[UIViewController alloc] init]; 
UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)]; 
[viewV setBackgroundColor:[UIColor clearColor]]; 

UIPopoverPresentationController *popOverController = pickerController .popoverPresentationController; 
popOverController.popoverContentSize = CGSizeMake(150, 160); 
[popOverController setDelegate:self]; 

popOverController.sourceView = self.view; 
popOverController.sourceRect = sender.frame; 
popOverController.permittedArrowDirections = UIPopoverArrowDirectionUp; 

[self presentViewController:popOverController 
        animated:YES 
        completion:nil]; 
+3

'[auto presentViewController: popOverController animato: SI completamento: nil];' dà un avvertimento: 'tipi di puntatore incompatibili inviando 'UIPopoverPresentationController *' per il parametro di tipo 'UIViewController * _Nonnull'' – ppaulojr

2

Ciò causerà su iOS 8. Quindi, mi consiglia di utilizzare la seguente libreria Github. https://github.com/skywinder/ActionSheetPicker-3.0 oppure puoi scrivere codice base su versione iOS.

if (OLDER_THAN_IOS_8) { 
     // Your regular code 
     pickerController = [[UIViewController alloc] init]; 
     UIView *viewV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 160)]; 
     [viewV setBackgroundColor:[UIColor clearColor]]; 
     popOverController = [[UIPopoverController alloc] initWithContentViewController:pickerController]; 
     popOverController.popoverContentSize = CGSizeMake(150, 160); 
     [popOverController setDelegate:self]; 

     CGRect ImageBtnFrame = [self.view convertRect:sender.frame fromView:self.view];  
     [popOverController presentPopoverFromRect:ImageBtnFrame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

    } else { 

    // New Code that support iOS -8 using UIPopoverPresentationController 
    // Checkout @AndreasZ answer for the same 
    } 
11

Secondo 2014 WWDC, nel marchio di 30 minuti, la risposta giusta è:

- (void) tapButton:(id) sender 
{ 
    MyViewControllerClass * vc = [[MyViewControllerClass alloc] init]; 
    vc.modalPresentationStyle = UIModalPresentationPopover; 

    UIPopoverPresentationController * popOverController = vc.popoverPresentationController; 
    [popOverController setDelegate:self]; 
    popOverController.sourceView = sender; 
    popOverController.sourceRect = ((UIButton*)sender).frame; 
    popOverController.permittedArrowDirections = UIPopoverArrowDirectionUp; 

    [self presentViewController:vc 
         animated:YES 
        completion:nil]; 
} 

Si noti che la risposta accettata ha alcuni problemi come:

  • Non impostando il modalPresentationStyle
  • Presentazione dello UIPopoverPresentationController * anziché dello UIViewController
+0

Sì, hai ragione. Questa dovrebbe essere la risposta accettata. – rahul

Problemi correlati