Dies ist nicht der richtige Weg, init
auf einem bereits initialisierten Objekt selten (ich denke nie) aufrufen.
Die Art, wie ich dieses Problem löste, ist eine Unterklasse von UINavigationController zu erstellen.
In dieser Unterklasse überschreiben i die 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;
}
Die fakeRootViewController eigentlich nichts tut, ist es eine Abhilfe für iOS nicht die Möglichkeit, die RootViewController einstellen zu müssen.
In einer anderen Funktion (setRootViewController: aViewController) verstecken Sie die Rückschaltfläche des neuen 'rootviewcontroller', so dass der Benutzer nie sieht, dass es einen gefälschten rootviewcontroller gibt. und schieben Sie es dann über dem fakerootviewcontroller
Die poptorootviewcontroller sollten überschrieben werden, um sicherzustellen, dass es immer knallt auf Index 1 des Stapels, nicht Index 0.
Der Getter von Viewcontrollers geändert werden soll, so dass es ein Array zurückgibt, ohne der fakerootviewcontroller (removeobjectatindex: 0
)
Hope dies hilft!
Dank Costique machen! Es funktioniert. Können Sie bitte erklären, wie setViewController funktioniert? –
Beide Methoden ersetzen den gesamten View-Controller-Stack im Navigationscontroller. Die "alten" Controller werden freigegeben. Das Stack-Array beginnt mit dem Root-Controller und das letzte Element ist der oberste View-Controller. – Costique
@Costique Wie kann ich Root setzen ... nehme ich an, ich muss root 3 mal ändern, dann wird diese Methode effizient funktionieren oder nicht? – Dalvik