3

にルートコントローラーをプッシュしましたUINavigationController。その rootcontroller クラス内で、UINavigationControllerwithにアクセスできますthis.NavigationController

ただし、この rootcontroller には ScrollView があり、この ScrollView にサブコントローラー (より正確には、このサブコントローラーのビュー) を追加しています。

このようなサブコントローラー内から UINavigationController にアクセスしたいと思います。次のプロパティはすべて null です

        this.NavigationController
        this.ParentViewController
        this.PresentedViewController
        this.PresentingViewController

ObjectiveC では、次のコードを使用できるようです

YourAppDelegate *del = (YourAppDelegate *)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:nextViewController animated:YES];

残念ながら、これを MonoTouch の C# にマップする方法がわかりません。次のことを試しましたが、うまくいきません。

UIApplication.SharedApplication.KeyWindow.RootViewController.NavigationController

UINavigationController オブジェクトをすべてのクラス (コンストラクターのパラメーター) に渡すことができることはわかっていますが、それはおそらく最もクリーンな方法ではありません。

4

2 に答える 2

4

poupouの答えを拡張するために、これが私のAppDelegateクラスで通常行うことの例です。

AppDelegateそれ自体の静的プロパティを追加します。

public static AppDelegate Self { get; private set; }

ルートナビゲーションコントローラーをプロパティとして追加します。

public UINavigationController MainNavController { get; private set; }

FinishedLaunching

Self = this;
window = new UIWindow(UIScreen.MainScreen.Bounds);
this.MainNavController = new UINavigationController(); // pass the nav controller's root controller in the constructor
window.RootViewController = this.MainNavController;
// ..

このようにして、次のようにどこからでもルートビューコントローラにアクセスできます。

AppDelegate.Self.MainNavController.PushViewController(someViewController);

...これをいつも書く代わりに:

AppDelegate myAppDelegate = (AppDelegate)UIApplication.SharedApplication.Delegate;
myAppDelegate.MainNavController.PushViewController(someViewController);

AppDelegateさらに、私が持っている可能性のある他のすべてのプロパティに直接アクセスできます。

お役に立てれば。

于 2012-11-14T07:14:22.243 に答える
2

UIApplicationDelegatenavigationControllerそれ自体はプロパティを定義しません。

OTOHは、独自のアプリケーション固有[UIApplication sharedApplication].delegateインスタンスを返すため、情報を共有するのに最適な場所です (そして、頻繁に使用される理由)。UIApplicationDelegate

ObjectiveC で一般的に起こるのは、このカスタムの派生型が独自のアプリケーションに関するプロパティUIApplicationDelegateを実装することです。IOWは、 を使用して、アプリ内のどこからでもアクセスできるプロパティを実装します。YourAppDelegatenavigationController[UIApplication sharedApplication].delegate

.NET / C# で非常によく似たことができます。この例のように、独自のプロパティを AppDelegate タイプに追加するだけです。Objective-C のように (必要に応じて)、またはより直接的に (たとえば、それらpublic staticをプロパティにすることで) アクセスすることができます。

プロパティを正しく追跡して設定する必要があることに注意してください (Objective-C でも行う必要があるのと同じように)。

于 2012-11-13T21:47:29.230 に答える