Вместо изменения источника 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
.