Отображение как основного, так и подробного вида в портретном режиме в MGSplitViewController - PullRequest
3 голосов
/ 26 октября 2011

В настоящее время я интегрирую MGSplitViewController в одно из моих приложений, и оно работает должным образом.

Но я хочу изменить способ отображения в настоящее время в портретном режиме. Поэтому я хочу использовать портретный режим при каждом открытии приложения.отобразить как главный, так и детальный контроллер вида. Так что при нажатии кнопки панели навигации он снова будет скрывать и показывать левый корневой контроллер вида.

Итак, я изменил код на

   - (BOOL)shouldShowMasterForInterfaceOrientation:(UIInterfaceOrientation)theOrientation
    {
    // Returns YES if master view should be shown directly embedded in the splitview, instead of hidden in a popover.
    //return ((UIInterfaceOrientationIsLandscape(theOrientation)) ? _showsMasterInLandscape : _showsMasterInPortrait);

     return YES;   
    }

Теперь и в портретном, и в ландшафтном режимах отображается как корневой, так и подробный контроллеры, как я хочу, но проблема в том, что кнопка панели навигации не работает, чтобы скрыть и показать левый корневой контроллер.

Кто-нибудь сделал это?

1 Ответ

1 голос
/ 04 ноября 2011

Вместо изменения источника MGSplitViewController или его подклассов можно использовать свойство showsMasterInPortrait MGSplitViewController, чтобы включать и выключать мастер из кода приложения. У меня это всегда хорошо работало.

Обновление со спецификой:

Я бы не использовал элемент кнопки панели, который предоставляет контроллер разделенного просмотра - он не слишком полезен для наших целей. Вместо этого установите собственную кнопку со связанным действием, которое переключает свойство showsMasterInPortrait вашего контроллера разделенного представления. Чтобы добраться до последнего, подключите розетку. Вам также понадобится розетка для самой кнопки, если вы собираетесь скрыть кнопку в альбомной ориентации. Убедитесь, что он правильно подключен в IB.

В шапке это означает что-то вроде этого:

@property(nonatomic,assign) IBOutlet MGSplitViewController* splitVC;
@property(nonatomic,assign) IBOutlet UIBarButtonItem* toggleButton;
- (IBAction)toggleMasterViewTouched:(id)sender;

А в определении класса:

@synthesize splitVC, toggleButton;

- (IBAction)toggleMasterViewTouched:(id)sender
{
  BOOL master_shown = !self.splitVC.showsMasterInPortrait;
  // Note: toggle the button's label text and/or icon between "hide" and "show" versions
  self.toggleButton.title = master_shown ? @"Hide Master" : @"Show Master";

  self.splitVC.showsMasterInPortrait = master_shown;
}

Если вы хотите, чтобы кнопка отображалась только в портретной ориентации, вам также нужно скрыть ее при автоповороте, поэтому отреагируйте на событие поворота (все еще в контроллере деталей):

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
  // hide when in landscape, show when in portrait
  self.toggleButton.hidden = UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

И это, надеюсь, все. Вы также захотите установить значения по умолчанию для showMasterInPortrait, а также метки и видимости кнопки-переключателя где-нибудь, вероятно, в viewDidLoad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...