以uipopover为中心的iPad

时间:2010-11-19 18:50:35

标签: ipad uipopovercontroller

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

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

一切正常。

现在 - 我想将此视图创建为弹出窗口。

我完成了基本操作(弹出并被解雇)

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

以下是我的问题......

1)如何在没有UIPopoverArrowDirectionAny选择的情况下创建一个以屏幕为中心的弹出窗口?

2)确保弹出窗口是我在XIB文件中创建它的大小(当前,它调整大小并删除窗口的一些最右边的大小)

感谢

3 个答案:

答案 0 :(得分:57)

如果没有箭头,则为“allowedArrowDirections”传递0:

[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES];

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

CGRect rect = CGRectMake(viewWidth/2, viewHeight/2, 1, 1);
[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES];

然后你有一个居中且无箭头的弹出窗口。

关于移除箭头的一点可能随时中断。由于某种原因,他们没有提供UIPopoverArrowDirectionNone选项,他们可能会选择在将来传递0时抛出异常,或者默认为某种情况。使用它需要您自担风险。

答案 1 :(得分:0)

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

UIPopoverArrowDirectionAny  
UIPopoverArrowDirectionUp
UIPopoverArrowDirectionDown
UIPopoverArrowDirectionLeft
UIPopoverArrowDirectionRight

如您所见,没有UIPopoverArrowDirectionNone

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

self.contentSizeForViewInPopover = CGSizeMake(320.0, 360.0);

您可以按照自己喜欢的方式设置尺寸。

答案 2 :(得分:0)

我刚刚一直在努力,但想尽可能多地在故事板中做一些改变方法:

1)在故事板中选择弹出框并取消勾选方向上/下/左/右以摆脱箭头。

以屏幕覆盖为中心准备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的圆角半径与我的设计不符,因此我将背景颜色更改为清除以对其进行排序,即将其添加到上面的块中:

popover.popoverController.backgroundColor = [UIColor clearColor];

2)在segue的目标控制器中找到属性“Popover”并勾选“Use Explicit Size”并将您希望它的大小设置为以弹出模式显示。