OK I found an example: http://www.juce.com/forum/topic/access-juceuiviewcontroller
I'm working on an example demo app, so far I have the default JUCE GUI app running with the UINavigationController and UINavigationBar. You can see it at https://github.com/adamski/juce-ios-navigation
It needs some tidying up and to get the back button appearing but I'm happy that I got the basic mechanism working.
I mocked up a demo like this a short time ago and found it easiest to bypass the juce TopLevelWindow and just create my own UIWindow at launch. Once you've done that you can add a UINavigationController to push/pop UIViews as you like.
Once you have a UIView it's trivial to add a juce component to it using addToDesktop with the UIView as the nativeWindowToAttachTo.
Ah OK thanks, I might try that approach too. I'm currently using getTopLevelComponent()->getWindowHandle() to get the view, then nextResponder on the UIView to get the controller, then nextResponder on the UIViewController to get the window... feels a little faffy and brittle if the heirarchy changes.
Would you be up for sharing your demo code at all?