I came to the conclusion that this cannot be done in any way, which I consider to be "sufficiently" legal. This may be disappointing, but the question of whether willShow ... will have to apply to split view controllers under each tab.
The solution that is likely to work,
https://github.com/grgcombs/IntelligentSplitViewController/blob/master/IntelligentSplitViewController.m
Although this code is undoubtedly smart, for me it is too βa side doorβ. I suspect (but don't know) that simply using delegate methods is not enough. Of course, the UISplitViewController itself needs to change its internal state, as well as call delegate methods? This method simply calls delegate methods when the orientation changes.
So ... I decided to use a more legitimate solution, which should use the new method introduced in iOS 5.
- (BOOL) splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation { return NO; }
So, the main menu is never hidden, so the popover control problem does not arise.
Of course, this is still not completely βlegalβ, since it still includes UISplitViewControllers that are not at the top level (UITabViewController is at the top level, and split views are on each tab)
Good luck with the solution you have chosen.
I will update this answer when I confirm that Apple will approve an application using this solution.
Snips source share