0

独自の CustomUIActionSheet を実装しようとしています。

ほとんど機能していますが、showInView メソッドがどのように機能するのかわかりません。

  • (void)showInView:(UIView *)ビュー

ビューを指定すると、このメソッドはそのビューをすべての単一ビューの前に配置することができます (おそらくウィンドウに追加しますか?) が、追加されているビューに応じて回転を設定することもできます。

パラメータとして受け取ったビューのウィンドウに追加してみました。

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];

しかし、繰り返しますが、ランドスケープでは失敗します。何も追加されないか、少なくとも表示されません

それで、私の質問は、両方の方向で機能する階層の最上位にビューを追加する方法の手がかりはありますか?

どうもありがとう!

4

1 に答える 1

1

階層の最上位にあるカスタム アラート ビューやその他の UI コンポーネントのソース コードを読んだ後、有効なソリューションを見つけました。

ウィンドウの最初のサブビューにビューを追加します。

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];
于 2013-03-12T14:29:07.460 に答える