Отображение основного и подробного представления в портретном режиме в MGSplitViewController

#ipad

#iPad

Вопрос:

В настоящее время я интегрирую 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:

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

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

Я бы не стал использовать элемент кнопки панели, который предоставляет контроллер split view — он не слишком полезен для наших целей. Вместо этого настройте свою собственную кнопку с соответствующим действием, которое переключает showsMasterInPortrait свойство вашего контроллера split view. Чтобы перейти к последнему, подключите свойство outlet. Вам также понадобится выход для самой кнопки, если вы собираетесь скрыть кнопку в альбомной ориентации. Убедитесь, что это также правильно подключено в 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);
}
  

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

Комментарии:

1. Можете ли вы поместить фрагмент здесь, что я должен сделать.

2. я внес следующие изменения, но все равно он не работает.. в настоящее время я использую xcode4.2 … симулятор iOS5… Если вы сделали этот пример приложения, вы можете опубликовать его где-нибудь, чтобы я мог его загрузить … В противном случае я могу отправить вам свой код

3. Я предлагаю обновить вопрос с помощью важнейших фрагментов кода и объяснить, что именно работает, что нет, и что вы ожидаете от каждого фрагмента кода.