2011-05-06 3 views
5

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

+0

Не '[поповер presentPopoverFromRect:]' работает для вас? –

+0

Вопрос в том, может ли он перемещать popOver после его представления – Sid

+0

Я не думаю, что это позиция может быть напрямую изменена. Однако, если вы назовете presentPopoverFromRect на него, не отпуская его, он должен «переместиться». – Anna

ответ

1

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

Используйте следующее, чтобы представить popover. Вы можете изменить значения 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

Я продолжаю сбивать голоса за это. Если вы собираетесь голосовать на этом принятом ответе, будьте полезны и оставьте комментарий. –

+0

«Создайте свой собственный» - это не тот ответ, который я бы искал – Loukas

+0

@ Loukas Надеюсь, вам понравится новый ответ лучше. Если UIPopoverPresentationController не предоставляет необходимые функции, вам придется воссоздать UIPopoverController, поскольку API не очень гибкий. –

0

Нет, вы не можете. Это не метод для этого.

pover presentPopoverFromRect: 

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

настоящее

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

+0

Пейзаж смотреть документ Пятьдесят на iPad. У них есть popover, который содержит текстовое поле. Попёр, анимированный над клавиатурой, и когда клавиатура уволена, она возвращается в исходное положение. Является ли сборка или разработчик энтузиазмом? – Daniel

+0

Когда появляется клавиатура, по умолчанию SDK будет перемещать popover выше, чтобы разместить клавиатуру. Когда клавиатура будет уволена, popover вернется в исходное местоположение. Все это построено поведением. – Andrew

+0

Да, это правильно. Я забыл, что было с моим комментарием, было слишком давно. – Daniel

0

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

+0

Это стоит попробовать, но я полагаю, что это может быть немного дорого. Я уверен, что, когда вы отклоняете его и пересматриваете, есть много ресурсов, которые происходят, которые могут быть довольно облагаются системой. –

+0

Это правда, но в этом случае хорошее управление памятью вступает в игру. Особенно с iPad, у вас есть немного, но больше памяти для игры. – WrightsCS

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