拡張 (から継承) するときに、非常に奇妙な動作がいくつか見つかりました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 コードで再現できるのかはわかりません)。