将uipopover置于iPad中

将uipopover置于iPad中,ipad,uipopovercontroller,Ipad,Uipopovercontroller,我想为iPad创建一个新的键盘 我设计了一个视图,当用户按下按键时,该视图包含按键和所有底层工作,以填充文本框,并在用户按下返回按钮时将值传递回调用例程 这一切正常 现在-我想创建一个popover视图 我已完成基本操作(弹出并被解除) 但现在我需要一些微调帮助 以下是我的问题 1) 如何创建以屏幕为中心的弹出窗口,而不选择UIPopoOverArrowDirection 2) 确保popover窗口的大小与我在XIB文件中创建它时使用的大小相同(目前,它会调整窗口的大小并删除窗口最右边的部分大

我想为iPad创建一个新的键盘

我设计了一个视图,当用户按下按键时,该视图包含按键和所有底层工作,以填充文本框,并在用户按下返回按钮时将值传递回调用例程

这一切正常

现在-我想创建一个popover视图

我已完成基本操作(弹出并被解除)

但现在我需要一些微调帮助

以下是我的问题

1) 如何创建以屏幕为中心的弹出窗口,而不选择UIPopoOverArrowDirection

2) 确保popover窗口的大小与我在XIB文件中创建它时使用的大小相同(目前,它会调整窗口的大小并删除窗口最右边的部分大小)

谢谢

tony

如果您使用的是UIPopoverController,它将有一个箭头。这是你的选择

UIPopoverArrowDirectionAny  
UIPopoverArrowDirectionUp
UIPopoverArrowDirectionDown
UIPopoverArrowDirectionLeft
UIPopoverArrowDirectionRight
如您所见,没有UIPopoverArrowDirectionNone

至于XIB大小,在实现文件的ViewDidLoad方法中,可以设置以下内容

self.contentSizeForViewInPopover = CGSizeMake(320.0, 360.0);

您可以按自己喜欢的方式为popover设置大小。

若要显示它,则“permittedArrowDirections”无箭头通过0:

要使其居中,请通过位于视图中心的1x1矩形:

CGRect rect = CGRectMake(viewWidth/2, viewHeight/2, 1, 1);
[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES];
然后你就有了一个居中且无箭头的popover


关于移除箭头的一点可能随时中断。由于某种原因,他们没有提供UIPopOverErrorDirectionNone选项,他们可能会选择在将来传递0时引发异常,或者选择默认值。使用它的风险由您自己承担。

我刚刚解决了这个问题,但希望在故事板中尽可能多地使用它,这会稍微改变方法:

1) 在故事板中选择Popor,取消勾选“上/下/左/右方向”以去除箭头

要在屏幕上居中覆盖,请准备segue并执行以下操作:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIStoryboardPopoverSegue* popover = (UIStoryboardPopoverSegue*)segue;
    CGFloat horizontalInset = (self.view.frame.size.width - popover.popoverController.popoverContentSize.width) / (CGFloat)2.0;
    CGFloat verticalInset = (self.view.frame.size.height - popover.popoverController.popoverContentSize.height) / (CGFloat)2.0;
    popover.popoverController.popoverLayoutMargins =
        UIEdgeInsetsMake(
            verticalInset,
          horizontalInset,
            verticalInset,
          horizontalInset);
}
在我的例子中,我还发现popover segue的角半径与我的设计不匹配,因此我将背景颜色更改为clear以进行排序,即将其添加到上面的块中:

popover.popoverController.backgroundColor = [UIColor clearColor];

2) 在segue的目标控制器中,找到属性“Popover”并勾选“Use Explicit Size”,然后将希望其在Popover模式下显示的大小放入其中。

对于处于横向模式的iPad,我必须切换CGRectMake的宽度和高度以正确居中。在iOS 7.0.x中也适用。在swift中,使用UIPopoverArrowDirection.allZeros删除箭头Yea,但如果硬编码0,则类似于UIPopoverArrowDirectionNone
popover.popoverController.backgroundColor = [UIColor clearColor];