C# Monotouch/Xamarin.iOS - 不支持推送导航控制器

Posted

技术标签:

【中文标题】C# Monotouch/Xamarin.iOS - 不支持推送导航控制器【英文标题】:C# Monotouch/Xamarin.iOS - Pushing A Navigation Controller Is Not Supported 【发布时间】:2014-01-28 19:02:13 【问题描述】:

我有一个为 iOS7 编写的应用程序......

我的 AppDelegate 中有以下代码

[Register ("AppDelegate")]
        public partial class AppDelegate : UIApplicationDelegate
        
            // class-level declarations
            UIWindow window;
            UINavigationController navigationController;
            HomeViewController_iPhone homeViewController;

        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        
            window = new UIWindow (UIScreen.MainScreen.Bounds);

            homeViewController = new HomeViewController_iPhone ();
            navigationController = new UINavigationController (homeViewController);
            window.RootViewController = navigationController;
            window.MakeKeyAndVisible ();

            return true;
        
    

在这条线上失败了

navigationController = new UINavigationController (homeViewController);

HomeViewController 是一个 UINavigationController 类...

我在构建代码时收到以下错误 MonoTouch.Foundation.MonoTouchException 已被抛出。 抛出 Objective-C 异常。名称 NSInvalidArgumentException 原因:不支持推送导航控制器。

有什么想法吗?

【问题讨论】:

【参考方案1】:

问问自己,为什么要在 UINavigationController 上创建一个新的 UINavigationController

如果您的homeViewControllerUINavigationController,那么只需执行以下操作:

window.RootViewController = new HomeViewController_iPhone ();

或者你的homeViewController 不应该是导航控制器?

【讨论】:

这是一个很好的观点,但是如果我实现你的建议,当我从我的 homeViewController(这是一个 UINavigationController)中调用 this.NavigationController.PushViewController() 时,它会告诉我 HomeViewController 的 navigationController 是空.... 我是否必须显式实例化 UINavigationController 视图的 navigationController ? @Goober 如果您的homeViewController UINavigationController,您将调用this.PushViewController() 将某些内容推送到您的自己的 堆栈中。使用this.NavigationController.PushViewController(),您将尝试在homeViewController 的导航控制器上推送一些东西。而且由于您的控制器没有嵌入 UINavigationController,但实际上相同,您将得到NULL。

以上是关于C# Monotouch/Xamarin.iOS - 不支持推送导航控制器的主要内容,如果未能解决你的问题,请参考以下文章

MonoTouch (Xamarin.iOS) Facebook 应用程序切换支持 iOS 5+

C#入门系列——第一个C#程序

译《C# 小技巧 -- 编写更优雅的 C#》原书名《C# Tips -- Write Better C#》

C#进阶C# 泛型

C#进阶C# 匿名方法

C#进阶C# 多线程