我正在使用以下策略构建基于窗口(所有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 init方法创建NavigationControllers,但我找不到任何相同的MonoTouch。
MyNavigationControllers PushViewController方法不应该自动分配MyTableViewController实例的NavigationController属性吗? 为了让这种自动装配进行,我可能还有什么遗漏?
其他一切都按预期工作。非常感谢MT团队! :)
谢谢!
答案 0 :(得分:0)
当您创建myNavigationController
的实例时,您是如何做到的?我相信initWithRootController
的C#等价物是:
UINavigationController navController = new UINavigationController(rootViewController);
要在自定义UINavigationController
中实现此功能,您必须创建一个新的构造函数:
MyNavigationController(UIViewController rootViewController)
{
ViewControllers = new UIViewController[1] { rootViewController };
}
这将为您设置rootViewController。您需要从PushViewController
方法中删除ViewDidLoad
。通过PushViewController
推送的任何后续ViewControllers都会自动为您设置此NavigationController
属性。