Можно ли перемещать UIPopoverController по экрану? - PullRequest
5 голосов
/ 07 мая 2011

Можно ли перемещать контроллер UIPopover по экрану, когда он уже представлен?
У меня есть небольшое представление в моем приложении, которое может немного двигаться, и я хотел бы, чтобы UIPopoverController перемещался вместе с ним без необходимости повторного представления UIPopoverController при каждом его перемещении. Возможно ли это?

Ответы [ 4 ]

1 голос
/ 19 июля 2013

Вы можете повторно вызвать presentPopoverFromRect.

См. http://developer.apple.com/library/ios/#qa/qa1694/_index.html

1 голос
/ 07 мая 2011

Начиная с iOS 9, «UIPopoverController устарел. Поповеры теперь реализованы как презентации UIViewController. Используйте модальный стиль представления UIModalPresentationPopover и UIPopoverPresentationController."

Используйте следующее для представления всплывающего окна.Возможно, вы сможете изменить значения sourceRect и sourceView, но это не предназначенное поведение API.

    DetailViewController *detailVC = self.detailViewController;
    detailVC.preferredContentSize = CGSizeMake(420, 92);
    detailVC.modalPresentationStyle = UIModalPresentationPopover;


    UIPopoverPresentationController *presController = detailVC.popoverPresentationController;
    if (presController) {
        presController.delegate = detailVC;
        presController.barButtonItem = self.detailButton;
        presController.sourceRect = self.view.frame;
        presController.sourceView = self.view;
        presController.permittedArrowDirections = UIPopoverArrowDirectionAny;
    }

    [self presentViewController: detailVC animated:YES completion:^{

    }];

Вместо этого я предлагаю сохранить ссылку на контроллер представления, представленный с popover, отклонить popover иповторно представить.

DetailViewController *detailVC = self.detailViewController;
[self dismissViewControllerAnimated:NO completion:^{

    UIPopoverPresentationController *presController = detailVC.popoverPresentationController;
    if (presController) {
        presController.delegate = detailVC;
        presController.barButtonItem = self.detailButton;
        presController.sourceRect = self.view.frame; //Update frame
        presController.sourceView = self.view;
        presController.permittedArrowDirections = UIPopoverArrowDirectionAny;
    }

    [self presentViewController: detailVC animated:NO completion:^{

    }];
}];
0 голосов
/ 07 мая 2011

Вы можете отслеживать касания пользователей по экрану и использовать presentPopoverFromRect: для повторного показа всплывающего окна.

0 голосов
/ 07 мая 2011

Нет, ты не можешь.Это не способ сделать это.

pover presentPopoverFromRect:

был упомянут в комментариях, но обратите внимание на

присутствует

, который вы не можете представить без перерисовки.

...