So far we’ve used two controller classes (StageController
and SceneController
) and referred to a third
(AppController
). All three classes are part of Mojo.Controller
namespace. The assistants
that we’ve created are associated with their respective controller classes
and rely heavily on the methods in those classes.
AppController
and the use of
stages within an application will be covered in depth in Chapter 10, when we cover notifications and
background applications.
It is worth noting that an application has just one application controller object and may optionally have a single application assistant to create and manage stages.
An application can have multiple stage controller objects, and
each stage controller can have a stage assistant. A stage
assistant is not an instance of StageController
, but is actually a delegate of
the controller. The assistant has a controller property set to a
reference to the associated controller, which is used to directly call
the controller’s methods. The assistant defines its own methods as
well.
Each stage controller has a stack of scene controllers. When a scene is pushed, a new scene controller is created and pushed onto the stack. As with the stage, each scene controller has a scene assistant delegate that, after initialization, will have its controller property set to a reference of the scene controller it belongs to.
To illustrate this, let’s go back to our News application. Although it’s quite simple now with only one stage and two scenes, it will, over time, grow to having multiple stages to handle the dashboard along with the card stage that we are currently working in, and there will be at least five scenes. The controller/assistant hierarchy is shown in Figure 2-7.
We’ve already looked at pushScene
and popScene
, but there are other methods that you
will use to manage the scene stack. Refer to the SDK documentation for a
complete and up-to-date list of available methods. Some of the more
commonly used methods include:
pushScene
(sceneArguments)
popScene(returnValue)
Removes a scene from the scene stack, passing the returnValue
to the newly revealed
scene’s activate
method.
popScenesTo (targetScene,
returnValue)
Removes scenes from the scene stack until the targetScene
is reached or there are no
scenes remaining on the stack, passing the returnValue
to the new scene’s activate
method.
swapScene
(sceneArguments)
Pops the current scene and simultaneously pushes a new scene without
activating or deactivating any underlying scenes, passing in the
optional sceneArguments
.
topScene()
getScenes()
Returns an array of scene controllers currently on the stack.
activeScene()
sceneArguments
and returnValue
can be any number of arguments of
any type. They are simply passed through to the target scene.
3.15.10.64