2010-11-29 7 views
1

Ich habe eine navigationsbasierte App, die es dem Benutzer ermöglicht, durch Hierarchien zu navigieren. Einige der Child-Hierarchien haben nur ein Element in ihnen, zum BeispielAutomatisches Drilldown durch die Navigationshierarchie?

TopLevel1----->Level2a 
TopLevel2 |->Level2b----->Level3a----->Level4a 
      |->Level2c  

anstatt die Benutzer tippen Sie auf ‚Level3a‘, ich will nur von Level2b zu Level4a springen, aber die Level3a Blick in den Stapel halten, so Wenn der Benutzer zurückgeht, ist es sichtbar.

Ich fand hier einen Code eine Reihe Hahn zu simulieren:

Simulate a Detail Disclosure Button press

Wenn jede Ebene geladen wird, überprüfe ich, ob es nur ein Element darin ist. Wenn ja, simuliere ich den Zeilenabgriff. Dies funktioniert zunächst und die endgültige Ansicht wird geladen. Aber wenn ich das Zurückverfolgen durch die Ansichtshierarchie beginne, bekomme ich Probleme (anscheinend sind die übersprungenen Ansichten nicht geladen).

Ich denke, was ich versuche zu erreichen, ist ziemlich einfach, also hoffe ich, dass jemand hier auf mich in die richtige Richtung zeigen kann.

Antwort

0

Sie sollten einen [self.navigationController pushViewController:level4 animated:NO] Aufruf in der viewWillAppear Methode für Ihren Level3 View Controller platzieren können. Dadurch wird level4 automatisch über level3 geschoben.

Wenn es nur manchmal passiert, kann level3 eine Eigenschaft haben, die angibt, wann dieses Verhalten auftritt.

+0

Danke, aber das gibt mir das gleiche Ergebnis. In der Tat, mit animierten: NEIN gibt mir sehr seltsame Ergebnisse. Wenn ich es in animiert ändere: JA, bekomme ich das gleiche Ergebnis wie mit dem simulierten Zeilenabgriffscode. Ich durchstöbere meinen Code, um zu sehen, was passiert. – smacdonald

0

Ich bin nicht 100% sicher, dass das funktionieren würde, aber das ist, was ich tun würde.

Sie könnten direkt [self.navigationController pushViewController:level4a animated:NO] und wenn das erledigt ist, einen neuen Array von viewControllers, die navigationController Anstands (ein Array, das Level3a enthält).

Hier ist ein Codebeispiel, in Sie didSelectRowAtIndexPath:

[self.navigationController pushViewController:level4a animated:NO]; //Push the level 4 first 
NSMutableArray* mutableViewControllers = [self.navigationController.viewControllers mutableCopy]; 
[mutableViewController addObject:level3a atIndex:3]; //Add the level 3 manually 
self.navigationController.viewControllers = mutableViewControllers; 
[mutableViewControllers release]; 
Verwandte Themen