UIActionSheet如何改变箭头位置?

22

为了在iPad上显示UIActionSheet,我这样做:

[actionSheetX showFromRect:RectX inView:myView animated:YES];

气泡窗口的箭头指向下方,我能否更改它的位置,使其指向左、上或右边,就像使用普通的气泡窗口时那样?

3个回答

25

苹果不提供任何访问 UIActionSheet 内部实现的途径,但是关于箭头方向,实际上有一种非常巧妙的方法可以绕过这个问题,从而能够将箭头方向改为所需的方向。

技巧在于在 - (void)showFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated 中搞乱矩形参数。苹果对此矩形参数的文档并不是很清楚,但如果您的原始矩形将给您一个向下的箭头方向,则提供具有大高度和负数 origin.y 的矩形将会将 action sheet 弹出窗口推到最上面,从而显示向上的箭头方向。这是一种极端的 hack,但它可以在所有固件版本中稳定运行。希望这有所帮助。


2
我对这种hackyness感到有点内疚,但它确实有效。 - lavoy
1
我认为这一点都不像黑客行为。你为什么认为苹果提供了一个带有单独“rect”参数的方法签名?如果你只需要为“view”提供边界矩形,那么“rect”参数可能就没有必要存在。 - user577537
我尝试使用BarButtonItem来实现这个功能,但是没有成功。我尝试从这里获取矩形位置:https://dev59.com/FXA75IYBdhLWcg3w_ej1#5914649 - fatuhoku
好的,我已经成功地从模态视图的UIBarButtonItem中完成了它。确保使用呈现视图控制器的视图矩形。UIView *parentView = self.presentingViewController.view; CGRect rect = [self.navigationItem.rightBarButtonItem frameInView:parentView]; CGRect hacks = CGRectMake(rect.origin.x, -1, rect.size.width, rect.origin.y + rect.size.height); [actionSheet showFromRect:hacks inView:parentView animated:YES];对我来说很好用。 - fatuhoku

4
CGRect cellRect = cell.bounds;
cellRect.size.width = cell.frame.size.width * 2;
cellRect.origin.x = -(cell.frame.size.width + 10.0);
[_actionSheet showFromRect:cellRect inView:cell animated:YES];

感谢- overboming。

iPad - 分割视图控制器: 它在主视图(表视图)单元格的末尾显示带有左箭头的操作表。箭头在单元格内部,距离为10个像素。试试这个。很容易理解操作表显示的逻辑。感谢- Manraj。


有用的提示,我能够调整上面的代码并获得所需的结果。 - Umair

2
-showFromRect:inView: 方法的文档说明如下:

在 iPad 上,此方法会将操作表显示在一个弹出框中,并将箭头指向视图上指定的矩形区域。

这意味着,您可以通过调整矩形区域来使其显示所需的箭头方向。但是,我想不出任何原因,让您需要手动设置箭头方向,因为 UIActionSheet 会自动计算最佳的箭头方向。

2
可能会发生的情况是,表格出现在用户手下,这并不好看。 - BastiBen
10
如果“iOS knows best”,为什么允许将箭头方向作为参数提供给普通的弹出窗口API?简短回答:iOS并不是最好的选择。 - hatfinch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接