2014-10-14 12 views
6

Używanie UIPopovercontroller poniżej ios8.0 w iphone działa dobrze z tym kodem. Ale w ios8 wyświetla się biały ekran. KodUIPopoverController dla iphone w ios8 pokazuje biały ekran

:

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]; 

Każda alternatywa dla systemów iOS 8, trzeba sugestię.

Odpowiedz

2

Spróbuj użyć nowego interfejsu API systemu iOS 8 w celu przechwytywania.

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

'[self presentViewController: popOverController animowany: TAK oddania: nil];' daje ostrzeżenie: 'niezgodne typy wskaźnik wysyłania 'UIPopoverPresentationController *' z parametrem typu„UIViewController * _Nonnull'' – ppaulojr

2

To spowoduje, że na iOS 8. Tak, polecam użyć następującej biblioteki Github. https://github.com/skywinder/ActionSheetPicker-3.0 lub możesz napisać kod bazowy na wersji 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

Według 2014 WWDC, w znaku 30 minut, prawidłowa odpowiedź brzmi:

- (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]; 
} 

Zauważ, że przyjęte rozwiązanie ma pewne problemy, takie jak:

  • Nie ustawiania modalPresentationStyle
  • Przedstawianie UIPopoverPresentationController * zamiast UIViewController
+0

Tak, masz rację. To powinna być zaakceptowana odpowiedź. – rahul

Powiązane problemy