2011-05-06 88 views
5

是否可以在屏幕上显示UIPopover控制器?
我在我的应用程序中可以稍微移动一个小视图,我希望UIPopoverController可以随它移动,而不必在每次移动时重新呈现UIPopoverController。这可能吗?UIPopoverController可以在屏幕上移动吗?

+0

是不是'[酥料饼presentPopoverFromRect:]'为你工作? – 2011-05-06 21:54:58

+0

现在的问题是,他是否可以移动popOver一旦提交 – Sid 2011-05-06 23:23:34

+0

我不认为它的位置可以直接更改。但是,如果您在不打开它的情况下调用presentPopoverFromRect,它应该“移动”。 – Anna 2011-05-07 00:46:15

回答

1

从iOS 9开始,“UIPopoverController已过时,现在将Popovers实现为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

我一直在为此投票。如果您打算为接受的答案投票,请提供帮助并发表评论。 – 2013-07-19 17:12:16

+0

“创建你自己的”不是我要找的答案 – Loukas 2016-03-18 14:06:17

+0

@Loukas我希望你会更喜欢这个新的答案。如果UIPopoverPresentationController没有提供所需的功能,您将不得不重新创建UIPopoverController,因为API不是很灵活。 – 2016-03-19 13:42:43

0

不,你不能。这不是做这件事的方法。

pover presentPopoverFromRect: 

在评论中提到,但注意到

目前

你不能没有重绘代表。

+0

Pease请参阅iPad上的Paper by Fifty。他们有一个包含文本字段的弹出窗口。在键盘上方弹出动画,当键盘被解除时,动画回到原始位置。内置或开发人员是否支持? – Daniel 2012-10-03 03:55:40

+0

当出现键盘时,默认情况下SDK会将弹出窗口移动到更高位置以容纳键盘。一旦键盘被解散,弹出窗口就会回到原来的位置。这都是建立在行为上的。 – Andrew 2013-07-19 16:39:48

+0

是的,这是正确的。我忘了我的观点是什么,现在太早了。 – Daniel 2013-07-19 17:47:47

0

您可以跟踪用户在屏幕上的触摸情况,并使用presentPopoverFromRect:来重新显示弹出窗口。

+0

这是值得一试的,但我想这样做可能有点贵。我相信,当你解雇它并重新实现它时,正在进行的资源分配很多,这可能会对系统造成严重的负担。 – 2011-05-07 01:35:48

+0

这是事实,但那是一个良好的内存管理进场的地方。特别是在iPad上,你有更多的记忆可供玩耍。 – WrightsCS 2011-05-07 01:41:30

相关问题