I've implemented my desired behavior.
It's not a particularly clean solution but it does offer an added benefit: the ability to swipe between the tabs at the bottom.
Essentially:
- I created a Container View that fills the entire screen, which contains a Page View Controller
- I removed the Page Control (didn't implement delegate methods so you cannot see the dots)
- The pages are 5 Collection Views from a reusable View Controller
- I implemented the delegate method that's called when a page fully transitions and then at that point I change the tint color of the appropriate bar button at the bottom (defaulted to gray), after looping through the others to reset the tint to gray.
- If the user taps a bar button instead of swiping, I set the view controllers for the page view controller and then update the tints.
This is working well, the code isn't very nice though.
One other thing I may do is override the bar button highlight state.
Tab bar buttons shouldn't become lighter when the user highlights one.
Interestingly enough, it's quite easy to not allow swiping between the pages, simply by removing the Page View Controller Data Source methods. Then it behaves like a true tabbed interface. I quite like the flexibility of having both swiping and tapping available though.