2

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

4

0 に答える 0