我想为iPad创建一个新的键盘。
我设计了一个视图,其中包含键和所有底层工作,以便在用户按下键时填充文本框,并在用户按下返回按钮时将值传递回调用例程。
一切正常。
现在 - 我想将此视图创建为弹出窗口。
我完成了基本操作(弹出并被解雇)
但现在我需要一些微调帮助。
以下是我的问题......
1)如何在没有UIPopoverArrowDirectionAny选择的情况下创建一个以屏幕为中心的弹出窗口?
2)确保弹出窗口是我在XIB文件中创建它的大小(当前,它调整大小并删除窗口的一些最右边的大小)
感谢
贝
答案 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”并将您希望它的大小设置为以弹出模式显示。