#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. Я предлагаю обновить вопрос с помощью важнейших фрагментов кода и объяснить, что именно работает, что нет, и что вы ожидаете от каждого фрагмента кода.