我在扩展(继承自)时发现了一些非常奇怪的行为UINavigationController
。考虑以下:
public class MyNavigationController : UINavigationController
{
public MyNavigationController(UIViewController viewRootController)
: base(viewRootController)
{
AllNavigationControllers.Add(this);
}
}
...
window.RootViewController = new MyNavigationController(new AnotherController());
这适用于 iOS 6,但在 iOS 5 中显示空白视图,而不是显示AnotherController
的主视图(从 NIB 加载)。理论上,调用base(viewRootController)
应该处理这个问题;它没有继承,这很奇怪。
这是我的解决方法...
public class MyNavigationController : UINavigationController
{
public MyNavigationController(UIViewController viewRootController) : base()
{
AllNavigationControllers.Add(this);
this.ViewControllers = new UIViewController[]{viewRootController};
}
}
...
window.RootViewController = new MyNavigationController(new AnotherController());
不漂亮,但现在它可以在 iOS 5 和 6 上运行。
为什么在继承时调用base(viewRootController)
不工作但当你不工作时调用?
(顺便说一句,我不确定这个问题是特定于 Monotouch(现在是 Xamarin.iOS),还是可以用等效的 Objective-C 代码重现)。