1

現在のビューが何であれ、その前にプッシュしたいアラートスタイルのビューがありますが、次の2行を呼び出すことができるように、現在のビューへの参照が必要です。

currentView.InsertSubviewAbove(myNewViewToShow, currentView);
currentView.BringSubviewToFront(myNewViewToShow);

では、現在のビューへの参照を取得するにはどうすればよいですか?

私はこのリンクの下部に答えを見ました:iOSでアクティブビューを取得する

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UIView *topView = appDelegate.viewController.view;

そして私はこれを試しました:

((AppDelegate)UIApplication.SharedApplication.Delegate).ViewController.View

しかし、私が知る限り、MonotouchappDelegateには「ViewController」プロパティはありません。

プログラムの流れを制御するためにストーリーボードとセグエを使用しています。さまざまなエラー状態を監視しているバックグラウンドスレッドがあり、エラーが発生するたびに、現在表示されているビューの上にUIViewをオーバーレイする必要があります。

4

4 に答える 4

2

解決策は少し複雑であることが判明したので、わかりやすくするために完全な解決策をここに投稿します。

UIViewController currentController = UIApplication.SharedAppplication.KeyWindow.RootViewController;
while (currentController.PresentedViewController != null)
    currentController = currentController.PresentedViewController;

UIView currentView = currentController.View;

基本的に、PresentedViewControllersのツリーがあり、ツリーの最後まで歩いて、どれが一番上にあるかを確認する必要があります。次に、そのコントローラーのビューを取得します。

于 2012-06-23T22:03:19.800 に答える
1

ビューが、内に表示されている場合はUINavigationController、任意のコントローラー内から使用できます。

this.NavigationController.TopViewController.View

何かをモーダルに提示している場合:

this.PresentedViewController.View

ただし、@stavashのアプローチは他の場合にも機能します。

于 2012-06-23T14:49:50.947 に答える
1

「iOSでネイティブビューを取得する」の回答は、アプリケーションの設定方法によって異なると述べています。彼のサンプルでは、​​彼はたまたま「viewController」の最上位のView Controllerへのハンドルを持っているので、それが機能するのと同じようにコードを構造化する必要があります。

iOS 5では、スタートアップコードでキーウィンドウに「RootViewController」プロパティを設定することをお勧めします。これにより、その方法でトップビューコントローラーにアクセスできるようになります。

ただし、一般に、アラートを表示する場合は、アラートコードのAPIに、現在のViewControllerをパラメーターとして取得させることができます。

void Alert (UIViewController myHost) {...}
于 2012-06-23T17:25:48.577 に答える
0

関連するビューへの参照を保持し、それらの外観を管理することが唯一の目的であるシングルトンクラス(「ScreenManager」と呼ばれることもあります)を作成することをお勧めします。このように、新しいビューをプッシュ/追加するたびに、そのビューへの参照を保持できます。次に、この新しいアラートビューを追加するときに、ScreenManagerでパブリックメソッドを呼び出すことにより、ビューに関連するすべてのアクションを実行できます。これがあなたが始めるのに役立つことを願っています。

于 2012-06-23T05:38:58.567 に答える