これは正しい方法ではありません。init
すでに初期化されているオブジェクトを呼び出すことはめったにありません(私は決してそうは思いません)。
この問題を解決する方法は、UINavigationControllerのサブクラスを作成することです。
このサブクラスでは、私はinitwithrootviewcontroller:
- (id) initWithRootViewController:(UIViewController *)rootViewController
{
UIViewController *fakeController = [[[UIViewController alloc] init] autorelease];
self = [super initWithRootViewController:fakeController];
if(self)
{
self.fakeRootViewController = fakeController;
rootViewController.navigationItem.hidesBackButton = YES;
[self pushViewController:rootViewController animated:NO];
}
return self;
}
fakeRootViewControllerは実際には何もしません。これは、iOSがrootviewcontrollerを設定する可能性がない場合の回避策です。
別の関数(setRootViewController:aViewController)では、新しい「rootviewcontroller」のバックボタンを非表示にして、ユーザーが偽のrootviewcontrollerがあることを決して認識しないようにします。次に、それをfakerootviewcontrollerの上にプッシュします
poptorootviewcontrollerは、常にスタックのインデックス0ではなくインデックス1にポップするように上書きする必要があります。
viewcontrollersのゲッターは、fakerootviewcontroller(removeobjectatindex: 0
)なしで配列を返すように変更する必要があります
お役に立てれば!