> On 13 Oct 2015, at 04:49, David Duncan <[email protected]> wrote:
> 
> 
>> On Oct 11, 2015, at 11:21 PM, Gerriet M. Denkmann <[email protected]> 
>> wrote:
>> 
>> iPad / iPhone Master-Detail app. iOS 9.0, Xcode 7.0
>> 
>> Rotating the iPad to Portrait my AppDelegate will receive a 
>> UIDeviceOrientationDidChangeNotification:
>> 
>> 12:23:01.182 -[AppDelegate iPadHasTurned:] 
>>      and does:
>>      UISplitViewControllerDisplayMode newMode = PrimaryOverlay
>>      splitViewController.preferredDisplayMode = newMode;
>>      [ self performSelector: @selector(delayedSetMode:) withObject: 
>> @(newMode) afterDelay: 0 ];      //      see below
>>                      
>> 12:23:01.183         -[AppDelegate 
>> splitViewController:willChangeToDisplayMode:] PrimaryOverlay 
>>      good, that's what I just have told it to do. 
>>      
>> 12:23:01.196         -[MasterViewController viewDidAppear:]   
>> 12:23:01.198 -[AppDelegate iPadHasTurned:] done
>> 
>> So far so good.
>> 
>> But now the pesky SplitViewController decides it knows best, and does:
>> 
>> 12:23:01.199 -[AppDelegate splitViewController:willChangeToDisplayMode:] 
>> AllVisible  
>> 
>> here my delayedSetMode will come to the rescue:
>> 12:23:01.212 -[AppDelegate delayedSetMode:] displayMode → PrimaryOverlay     
>>         
>>      does:   splitViewController.preferredDisplayMode = newMode;
>> 12:23:01.223         -[MasterViewController viewDidAppear:]   
>> 12:23:01.224 -[AppDelegate delayedSetMode:] done 
>> 
>> Is there a better way than this hack with delayedSetMode ?
> 
> Why are you doing this?

I have defined two new displayModes, let’s call them 
UISplitViewControllerDisplayMode_FocusOnPrimary and 
UISplitViewControllerDisplayMode_FocusOnSecondary, or FocusOnPrimary and 
FocusOnSecondary for short.

They should work like this on iPad:
• Landscape: both Primary (Master) and Secondary (Detail) should be visible. 
Automatic works fine in this case.
• Portrait with FocusOnPrimary: Primary (Master) should be visible, leaving the 
Secondary (Detail) partly obscured. Like PrimaryOverlay.
• Portrait with FocusOnSecondary: Secondary (Detail) should be visible, 
completely hiding Primary. Like PrimaryHidden.

The use case is as follows:
• If the user shifts focus to Detail - e.g. by clicking on a row in the 
TableView of Master (which makes some info about this row show up in Detail), 
the Detail or Secondary should be completely visible (and remain visible), 
regardless of orientation of iPad.

• Similarly if the user clicks the “< Master” Back-Button (or goes back to 
Master by some other means) then the focus should be on Master; and Master 
should remain visible, regardless of orientation of iPad.

I have implemented these two new displayModes via 
UIDeviceOrientationDidChangeNotification.


When I just set PrimaryOverlay in Portrait (while shifting focus to Main), all 
is fine (for the time being). But when I then rotate iPad to Landscape only the 
Detail view is shown, which is wrong. 


Kind regards,

Gerriet.


_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to