UIViewController has functionality for presenting other view controllers. This notion is wrapped into
UIOperation. It is mostly useful as a building block for other presentation operations such as
AlertOperation, but can be used directly inside a view controller too.
Wrapping view controller presentation inside and
Operation is useful for two reasons
- We can add mutual exclusivity, which prevents other view controller presentations from occurring. This may sounds trivial, but given the asynchronous nature of application, it is not that unlikely that this could happen.
- We can attach observers to clean up or tear down the current UI. This might mean removing selection highlighting or freeing up memory.
UIOperation is generic over two types. The controller being presented, which must be a
UIViewController and the controller doing the presenting, which must conform to the
PresentingViewController protocol. Operations framework adds conformance to
UIViewController for this protocol.
PresentingViewController protocol and
ViewControllerDisplayStyle enum expresses the various methods for presenting one controller from another. Essentially,
For example, let assume we must present a login controller from our root controller:
let ui = UIOperation( controller: loginController, displayControllerFrom: .Present(from) ) queue.addOperation(ui)
Alternatively, maybe we have a split view controller and need to set the detail controller:
let show = DisplayDetailsViewController(from: .ShowDetail(self)) queue.addOperation(show)
Updated less than a minute ago