2012-11-13 70 views
3

我有一個根控制器推在UINavigationController上。 內部的rootcontroller類,我可以訪問UINavigationControllerthis.NavigationController獲取對UINavigationController的引用

然而,這rootcontroller有一個滾動型和我添加子控制器(或者更準確地說,這個子控制器的視圖)這個滾動型。

我現在想從這樣的子控制器內部訪問UINavigationController。 以下屬性均爲空

 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的對象,以我所有的類(在構造函數的參數),但是這可能不是要走的最徹底的方法。

+0

我不熟悉單點觸摸,但你必須首先設置rootViewController,而不是推它。 – ninjaneer

回答

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的屬性。

希望這會有所幫助。

2

UIApplicationDelegate本身不定義navigationController屬性。

OTOH [UIApplication sharedApplication].delegate返回自己的實例,具體,UIApplicationDelegate應用 - 所以這是一個偉大的地方分享的東西(以及它爲什麼經常使用)。

常用會發生什麼事,在的ObjectiveC,是這個習俗,UIApplicationDelegate衍生,類型將執行它自己的應用程序明智性能。 IOW YourAppDelegate將實施navigationController屬性,該屬性可通過使用[UIApplication sharedApplication].delegate在應用程序內的任何位置進行訪問。

你可以在.NET/C#中做類似的事情。只需將您自己的屬性添加到AppDelegate類型,例如this示例。您可以像Objective-C(如果您喜歡)或更直接地訪問它們(例如通過使它們成爲public static屬性)。

請注意,您仍然需要正確跟蹤和設置屬性(就像它也需要在Objective-C中完成一樣)。

+0

謝謝你poupou! – Matt