UIActionSheet showInView方法如何插入其视图?

时间:2013-03-07 17:41:36

标签: ios cocoa-touch uiview customization uiactionsheet

我正在尝试实现自己的CustomUIActionSheet。

我几乎可以使用它,但我不知道showInView方法是如何工作的。

  • (void)showInView:(UIView *)view

给出一个视图,这个方法能够将它的视图放在每个视图的前面(可能会将它添加到窗口?)但是它也能够相应地设置旋转到正在添加的视图。

我已经尝试将它添加到我收到的视图窗口中。

CGFloat startPosition = view.window.bounds.origin.y + view.window.bounds.size.height;

self.frame = CGRectMake(0, startPosition, view.window.bounds.size.width, [self calculateSheetHeight]);

[view.window addSubview:self];

self.blackOutView = [self buildBlackOutViewWithFrame:view.window.bounds];
[view.window insertSubview:self.blackOutView belowSubview:self];

通过这样做,所有工作,除了当我在横向上呈现动作表时,动作表从右边开始(因为Windows系统引用它始终是相同的)

我也尝试将它添加到视图窗口的rootViewController中:

UIView * view = view.window.rootViewController.view;

 CGFloat startPosition = view.bounds.origin.y + view.bounds.size.height;

 self.frame = CGRectMake(0, startPosition, view.bounds.size.width, [self calculateSheetHeight]);

 [view addSubview:self];

 self.blackOutView = [self buildBlackOutViewWithFrame:view.bounds];
 [view insertSubview:self.blackOutView belowSubview:self];

但同样,它在景观上失败了,它没有添加任何东西,或者至少,我看不到它

所以,我的问题是,如何在两个方向上工作的层次结构顶部添加视图的任何线索?

非常感谢!

1 个答案:

答案 0 :(得分:1)

在阅读了自定义警报视图的一些源代码以及层次结构顶部的其他ui组件之后,我找到了一个可行的解决方案。

在Windows的第一个子视图中添加视图:

UIView * topView = [[view.window subviews] objectAtIndex:0];

所以最终的代码是

UIView * topView = [[view.window subviews] objectAtIndex:0];

CGFloat startPosition = topView.bounds.origin.y + topView.bounds.size.height;

self.frame = CGRectMake(0, startPosition, topView.bounds.size.width, [self calculateSheetHeight]);

[topView addSubview:self];

self.blackOutView = [self buildBlackOutViewWithFrame:topView.bounds];
[topView insertSubview:self.blackOutView belowSubview:self];