MonoTouch:UITableViewController,NavigationController 在 NavigationController.PushViewController 之后为空

Posted

技术标签:

【中文标题】MonoTouch:UITableViewController,NavigationController 在 NavigationController.PushViewController 之后为空【英文标题】:MonoTouch: UITableViewController,NavigationController is null after NavigationController.PushViewController 【发布时间】:2011-05-01 20:42:12 【问题描述】:

我正在使用以下策略构建一个基于窗口(所有 UI 以编程方式连接,没有 IB)的 MonoTouch 应用程序:

伪代码:

 Note: I'm not calling base.ViewDidLoad on any of the ViewDidLoad calls, 
 nor calling any base constructors of any ViewController 
 subclass I've implemented. 

 AppDelegate : UIApplicationDelegate
      FinishedLaunching() 
             window.AddSubView(tabbarController.View)

 TabbarController : UITabbarController
       ViewDidLoad() 
              ViewControllers[0] = myNavigationController

 MyNavigationController : UINavigationController
       ViewDidLoad()
             PushViewController(myTableViewController,false)

 MyTableViewController : UITableViewController
        ViewDidLoad() 
             //Property NavigationController is NULL.

根据 developer.apple.com,应该使用名为 initWithRootController 的 ObjC 初始化方法创建 NavigationControllers,但我找不到任何相当于这样做的 MonoTouch。

参考http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/TableView_iPhone/TableViewAndDataModel/TableViewAndDataModel.html

MyNavigationControllers PushViewController 方法不应该自动分配 MyTableViewController 实例的 NavigationController 属性吗? 要让这个自动装配继续进行,我可能会缺少什么吗?

其他一切都按预期工作。非常感谢MT团队! :)

谢谢!

【问题讨论】:

【参考方案1】:

当你创建myNavigationController 的实例时,你是怎么做的?我相信 initWithRootController 的 C# 等效项是:

UINavigationController navController = new UINavigationController(rootViewController);

要在您的自定义 UINavigationController 中实现这一点,您必须按照以下方式创建一个新的构造函数:

MyNavigationController(UIViewController rootViewController)

    ViewControllers = new UIViewController[1]  rootViewController ;

这将为您设置 rootViewController。您需要从 ViewDidLoad 方法中删除 PushViewController。通过PushViewController 推送的任何后续视图控制器都将自动为您设置此NavigationController 属性。

【讨论】:

感谢您的回答!因此,如果我对您的理解正确,要使 myTableViewController 的 NavigationController 属性的自动装配起作用,我的自定义 navigationController 必须设置它的 ViewControllers[0] 吗?只有当我将 UINavigationController 子类化(这似乎与 Apple 推荐的内容相悖,参考 developer.apple.com/library/ios/#documentation/uikit/reference/…)“此类不用于子类化。” 明天将尝试这个时,才需要这样做。再次感谢! 是的,因为你没有继承 UINavigationController 那么你需要做的就是实例化为UINavigationController navController = new UINavigationController(rootViewController);

以上是关于MonoTouch:UITableViewController,NavigationController 在 NavigationController.PushViewController 之后为空的主要内容,如果未能解决你的问题,请参考以下文章

Monotouch:了解委托机制模式

如何在 DialogViewController (Monotouch.Dialog) 上设置背景颜色

Monotouch 找不到 AudioFileOpenURL

MonoTouch:StoryBoarding - 手动转场?

MonoTouch 中的 ViewForZoomingInScrollView

MonoTouch 4.0 使用模拟器抛出 ReflectionTypeLoadException