我在扩展(继承自)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代码重现)。