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 之后为空的主要内容,如果未能解决你的问题,请参考以下文章
如何在 DialogViewController (Monotouch.Dialog) 上设置背景颜色
Monotouch 找不到 AudioFileOpenURL
MonoTouch:StoryBoarding - 手动转场?