I am trying to control a tabnavigator with the FSM. I don't know of a good way to do this besides catching the index change event, canceling it, and then if it successfully transitions to the next state I will set the tab navigator to the new index. Is there a better way to do this? ... How would you define the difference between view state and application state?
It's a bit overly granular. While it's possible to do it just like you mention, you're not gaining a lot by running all the state change logic through the PureMVC apparatus. This is how I define the difference between view and app states.
If all the states you're tracking can be contained in a single view component (even a complex one with several forms), then you're better off calling those view states and implementing them in that component. If no other actors in the system really care about those specific states, then why expose knowledge of them throughout the app needlessly?
Now, if you have several view components that are concerned with a common state, for instance, a header that displays a different banner for each state, a menu bar that displays different items in each state, and a form control that presents a different form in each state, then you have a good reason to call that an 'application state' and implement an FSM to support it. In this way you coordinate the view states of disparate components based on shared updates about the application state.