2013-04-11 57 views
0

有没有一种方法可以计算/检测PopOverController是否位于View顶部?如果是这样,让它显示allowedArrowDirections:UIPopoverArrowDirectionDown vs allowedArrowDirections:UIPopoverArrowDirectionUp取决于如果你在视图的底部或顶部,或者如果有足够的空间来显示popOverControl没有调整大小?替代方法我正在考虑滚动视图向下或向上如果没有足够的空间,但我想利用allowedArrowDirections:UIPopoverArrowDirectionDown和allowedArrowDirections:UIPopoverArrowDirectionUp。有什么建议么?PopOverController在视图顶部调整大小

+1

你必须检查你的触摸点的Y位置。根据 – Hiren 2013-04-11 16:01:52

+0

计算房间并显示,那么视图绝对顶部的坐标是什么?我必须获得UIWindow的Y坐标吗?或者是最容易的0? – wilforeal 2013-04-11 19:31:56

+0

你可以通过触摸事件来检查 – Hiren 2013-04-12 04:45:49

回答

0

您不应该计算popover控制器放置视图的位置。 popover控制器旨在让您指定箭头指向的位置,以及将弹出窗口添加到的视图。然后popover控制器会计算它有空间显示其弹窗视图的位置。

但是,如果您可以通过指定一个或多个UIPopoverArrowDirection来限制popover控制器放置弹出视图的位置。例如,假设您有一个较大的视图(视图A),并且视图A左侧有一个较小的子视图(视图B)。如果要显示位于视图B右侧的按钮视图的弹出窗口,当你出现了,你可以告诉酥料饼的控制器仅能显示中显示其酥料饼的视图按钮的边框的右侧,像这样:

[popoverController presentPopoverFromRect: buttonView.frame 
            inView: viewA 
       permittedArrowDirections: UIPopoverArrowDirectionLeft 
           animated: YES]; 

编辑

灿您将在包含表视图的视图的坐标空间中获取文本字段的框架?

CGRect frame = [tableView.superview convertRect: textField.frame fromView: textField.superview]; 
[popoverController presentPopoverFromRect: frame 
            inView: tableView.superview 
       permittedArrowDirections: UIPopoverArrowDirectionLeft 
           animated: YES]; 

假设tableView的超级视图足够大以满足您的需求,这应该适应弹出窗口的显示。

+0

在当前的项目我工作我有PopOver在UITableviewCell里面的UITextField顶部显示。如果Im在UItableviewCell的顶部,则UIPopOverControl调整为较小的大小,从而防止项目可见。我必须在位于顶部或在UITextField – wilforeal 2013-04-11 16:40:44

+0

@wilforeal我已根据您最后的评论编辑我的答案。 – 2013-04-11 20:47:14

0

拿到后,你得到的X和Y点,你可以计算出可用空间打开您的PopOverController在你的触摸从

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint touchPoint = [touch locationInView:myView]; 
    NSLog("%lf %lf", touchPoint.x, touchPoint.y); 
} 

协调。

请让我知道如果您需要进一步的帮助