关于iPhone:UIPopoverController没有箭头?

UIPopoverController without arrows?

我想知道制作一个没有箭头的UIPopoverController
实际上,我想模拟这样的事情:
Screenshot

看到

  • 没有箭头

  • 某个标题以某种方式位于UIPopoverController的扩展顶部边框之内,而不是像普通的UIPopoverController那样位于其内部。

我假设这不是一个真正的UIPopoverController对象,但我希望您能提供有关如何实现相同效果的建议(使用CoreGraphics?->特别是3D突出边框的半透明降级效果)和/或链接到某些来源的建议任何人以前都做过。

预先感谢。

伊格纳西奥

编辑:

我仍在寻找这些东西,并且意识到即使在第三方应用中也正在使用
一个例子是:如图所示,iPad的twitterrific。
有人吗将标题放在popovercontroller中是很难看的。
alt

以下方法对我来说很好(包括iOS7)

1
2
3
4
 [popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
                                    inView:self.view
                  permittedArrowDirections:NULL
                                  animated:YES];


n


尽管对于苹果公司是否会批准没有箭头的弹出式窗口的应用程序存在一些疑问,但您可能想查看有关箭头的本帖子和有关模式视图的该帖子。


您可以通过使用UINavigationController并将UIViewControllers添加到导航控制器来添加标题。设置UIViewController的'title'属性以显示标题。

正如某些人建议的那样,将箭头方向设置为NULL可能导致无法预测的行为,因为该方法使用此变量来确定如何相对于条形按钮项或矩形来定向弹出窗口。

最好继承UIPopoverBackgroundView的子类,并设置各种箭头返回方法,以使箭头返回0(仅iOS5及更高版本)。请参见以下示例,以了解如何正确地将其子类化:

http://blog.teamtreehouse.com/customizing-the-design-of-uipopovercontroller

简单的实现示例(在此示例中,MyCustomPopoverBGView是UIPopoverBackgroundView的子类):

1
2
3
4
5
6
7
8
9
10
UIViewController *vCtrlr = [[UIViewController alloc] initWithNibName:nil bundle:nil];
vCtrlr.title = @"My Title";
self.navCtrlr = [[UINavigationController alloc] initWithRootViewController:vCtrlr];
self.popCtrlr = [[UIPopoverController alloc] initWithContentViewController:_navCtrlr];
_popCtrlr.popoverBackgroundViewClass = [MyCustomPopoverBGView class];
            [_popCtrlr presentPopoverFromRect:CGRectMake(0,
                                                         0,
                                                         320,
                                                         150)
                                       inView:self permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

通过在弹出框和显示的视图控制器之间放置导航控制器来产生顶部边框。

换句话说,弹出框显示一个导航控制器,并且该导航控制器的根视图控制器已设置为您的视图控制器。这将产生标题栏,并允许您使用[self setTitle:@"My Title"]设置标题并添加导航按钮。


要创建带有标题的弹出窗口,您需要创建一个单独的视图,就像创建一个单独的窗口,然后将该视图加载到弹出窗口中一样。


只需复制