2016-03-28 1 views
2

Я пытаюсь показать контроллер представления как UIPopoverPresentationController под кнопкой или в центре окна. Но он всегда отображается как полноэкранное всплывающее окно.UIPopoverPresentationController, показывающий полноэкранное модальное всплывающее окно всегда

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    MySecondViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"Pop"]; 

    // present the controller 
    // on iPad, this will be a Popover 
    // on iPhone, this will be an action sheet 
    controller.modalPresentationStyle = UINavigationControllerOperationPop; 
    [self presentViewController:controller animated:YES completion:nil]; 
    controller.preferredContentSize = CGSizeMake(280, 230); 
    // configure the Popover presentation controller 
    UIPopoverPresentationController *popController = [controller popoverPresentationController]; 
    popController.permittedArrowDirections = UIPopoverArrowDirectionUp; 
    popController.delegate = self; 

    // in case we don't have a bar button as reference 
    popController.sourceView = self.showPop; 
    popController.sourceRect = CGRectMake(384, -120, 280, 230); 


-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller { 
    return UIModalPresentationNone; 
} 

ответ

3

Попробуйте этот код он работает

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
SecondViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"pop"]; 

controller.modalPresentationStyle = UIModalPresentationPopover; 
controller.preferredContentSize = CGSizeMake(280, 230); 
// configure the Popover presentation controller 

controller.popoverPresentationController.delegate = self; 
controller.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp; 


// in case we don't have a bar button as reference 
controller.popoverPresentationController.sourceView = self.view; 
controller.popoverPresentationController.sourceRect = CGRectMake(384, -120, 280, 230); 
// controller.presentationController.delegate = self; 
[self presentViewController:controller animated:YES completion:nil]; 
+0

я собираюсь использовать кнопку бар ... она показывает мне tablewiew на весь экран ... Что я должен сделать ... @ Hassan Aftab –

+0

@SurajSukale, это может быть слишком поздно для вас, но, возможно, кто-то еще может воспользоваться этим комментарием. Вы должны назначить делегата контроллеру.popoverPresentationController и в методе реализации делегата 'adaptivePresentationStyle (для: UIPresentationController)', возвращая значение 'UIModalPresentationStyleNone' – Lukas1

2

Я отправил еще один вопрос к тому же вопросу и я решил мою проблему. Вот ссылка на вопрос: UIPopoverPresentationController is showing full screen modal on iPhone

В ViewController.h Сначала сделайте свойство UIPopoverPresenatationController.

@property(nonatomic,retain)UIPopoverPresentationController *dateTimePopover8; 

Затем, чтобы показать PopOverPresentationcontroller

UINavigationController *destNav = [[UINavigationController alloc] initWithRootViewController:dateVC]; 
/*Here dateVC is controller you want to show in popover*/ 
       dateVC.preferredContentSize = CGSizeMake(280,200); 
       destNav.modalPresentationStyle = UIModalPresentationPopover; 
       _dateTimePopover8 = destNav.popoverPresentationController; 
       _dateTimePopover8.delegate = self; 
       _dateTimePopover8.sourceView = self.view; 
       _dateTimePopover8.sourceRect = [sender frame]; 
       destNav.modalPresentationStyle = UIModalPresentationPopover; 
       destNav.navigationBarHidden = YES; 
       [self presentViewController:destNav animated:YES completion:nil]; 

Вы, наверное, заметили, что мы представляем View Controller вместо представления popOver.So мы должны скрывать это новый способ also.It скрывает автоматически, когда мы щелкаем на экране.

-(void)hideIOS8PopOver 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

Мы должны реализовать делегат UIPopoverPresenatationController в file.write реализации ниже метод делегата в файле реализации.

- (UIModalPresentationStyle) adaptivePresentationStyleForPresentationController: (UIPresentationController *) controller { 
    return UIModalPresentationNone; 
} 
0

В раскадровке это очень просто. Просто управляйте перетаскиванием из элемента управления, который активирует действие (например, UIBarButton или обычную кнопку) в контроллер просмотра раскадровки (если корневой вид контроллера навигации, перетащите его на контроллер навигации). Выберите segue и измените вид в инспекторе атрибутов на «Present Modally», презентация: лист формы (если вы хотите, чтобы он показывался в центре), выберите тип перехода, который вы хотите (по умолчанию это круто).

Attribute Inspector screenshot

Смежные вопросы