これは正しい方法ではありません。既に初期化されているオブジェクトでinit
を呼び出すことはめったにありません。
この問題を解決する方法は、UINavigationControllerのサブクラスを作成することです。 fakeRootViewControllerが実際に何もしないこのサブクラスで
は、私が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;
}
を上書きし、それは、iOSがrootviewcontrollerを設定する可能性を持っていないための回避策です。
別の関数(setRootViewController:aViewController)では、新しい 'rootviewcontroller'のバックボタンを隠すので、ユーザーは偽のrootviewcontrollerが存在することはありません。そしてその後poptorootviewcontrollerを確認し、それは常に、それはせずに配列を返すようviewcontrollersのゲッターを変更すべきスタックのインデックス1ではなくインデックス0
にポップするために上書きされるべきである
fakerootviewcontroller上方に押し込みfakerootviewcontroller(removeobjectatindex: 0
)
これは役に立ちます。
おかげCostiqueに行う必要があります!それは働いています。あなたはsetViewControllerのしくみを説明できますか? –
両方のメソッドは、ナビゲーションコントローラ内のView Controllerスタック全体を置き換えます。 "古い"コントローラがリリースされます。スタック配列はルートコントローラで始まり、最後の要素は最上位のビューコントローラです。 – Costique
@Costiqueどのように私はルートを設定することができます...私は3回、このメソッドは効率的に動作するかどうかを変更する必要がありますか? – Dalvik