I had been meaning to write this for a while now. And even if the examples are all in Swift (because shiny) the same can be applied to Objective-C code as well without any problem.
Slimming down your iOS view controllers is a big topic around the office and there was even an entire issue of objc.io centered around the topic (as well as another one on architecture).
We had also tried some MVVM as well as Viper (ok, being an avid Uncle Bob clean code watcher and reader, I know this is about a lot more but imho doesn’t apply too well to iOS apps since there is only one presenter) but neither of those models really stuck. If you look at what Wikipedia has to say about MVC you will notice that it mentions the model notifying its associated views and controllers. Aha! So why not try that:
The view takes care of all it’s own presentation and not the controller (as you’ll see in code most of the time). Now of course KVO can get pretty cumbersome when there are a lot of properties involved but you get the point. The controller has nothing to do with the presentation of the model and just received requests from the view to update the model. What does the controller look like?