Удалите UIBarButtonItem из контроллера главного представления, когда виден контроллер подробного представления

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

Я не могу использовать классы размеров для этого, так как кнопка, которую я хочу удалить, находится в главном контроллере представления (на самом деле у меня есть кнопка как в мастере, так и в деталях, которые следует удалить), у которых не будет класса размера Regular w Regular час Кроме того, Interface Builder не предоставляет параметр «Установлено» для UIBarButtonItems, и я не могу проверить классы размера в коде, потому что приложение также будет работать на iOS 7.

Как я могу удалить/скрыть UIBarButtonItem, когда на экране отображаются и основной, и подробный контроллер представления? Или я не мог добавить эту кнопку в IB, а затем добавить ее в код, когда сочту нужным, но как мне это сделать? знаете, будут ли оба контроллера представления отображаться на экране?


person Jordan H    schedule 07.08.2014    source источник


Ответы (1)


Вот хорошее решение, которое отлично работает для iOS 8 и iOS 7 на iPhone и iPad. Вы просто определяете, есть ли контроллер с разделенным представлением, и если да, то проверяете, свернут ли он или нет. Если он свернут, вы знаете, что на экране находится только один контроллер представления. Зная эту информацию, вы можете сделать все, что вам нужно.

//remove right bar button item if more than one view controller is on screen
if (self.splitViewController) {
    if ([UISplitViewController instancesRespondToSelector:@selector(isCollapsed)]) {
        if (!self.splitViewController.collapsed) {
            self.navigationController.navigationBar.topItem.rightBarButtonItem = nil;
        }
    } else {
        self.navigationController.navigationBar.topItem.rightBarButtonItem = nil;
    }
}
person Jordan H    schedule 22.08.2014