2015-11-23 4 views
2

мой проект находится в быстрой 2 и работает в обеих ориентациях.как убрать модальную презентацию UISplitController в портретной ориентации

У меня есть UISplitViewController, представленный модально.

в навигационной панели основного вида У меня есть кнопка на панели, чтобы отменить это.

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

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

есть решение?

заранее спасибо

представляя контроллер

я представить модальное splitViewController из раскадровки:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

if segue.identifier == "splitSegue" { 

    let split = segue.destinationViewController as! UISplitViewController 
    let masterNav = split.viewControllers[0] as! UINavigationController 
    let master = masterNav.topViewController as! MasterController 
    master.delegate = self 
}} 

и это делегат удовольствие для отклонять:

func updateAppCategory(master: MasterController) { 

    self.presentedViewController?.dismissViewControllerAnimated(true, completion: nil) 
} 

ответ

2

Приложение Рекомендуемый способ отклонения представленного контроллера представления - это позволить диспетчеру представления представления обрабатывать увольнение. Контроллер представления, который представлен, не должен отклоняться.

Используйте подход делегата, сделайте метод didPressCancel в делегате и вызовите его, когда пользователь нажмет на отмену. И из представления контроллера представления, при реализации этого метода, отклоните представленный контроллер представления.

+0

Прошу прощения, у меня есть еще одна небольшая проблема ... с делегатом в портретной ориентации, когда я увольняю диспетчер раздельного просмотра из представления только детали, увольняется, а не мастера, почему? – giorgio83

+0

Как вы представляете, можете ли вы добавить свой код к вопросу? –

+0

Я отредактировал сообщение .. – giorgio83

3

У меня была такая же проблема и нашли решение:

splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible 

При вставке этого в viewdidload, то вы можете уволить splitviewcontroller в портретном и ландшафтном режиме

+0

Это работает для меня, приятное альтернативное решение – Jonatan

1

решение Эдгара работает, однако если вы не хотите использовать этот режим отображения, вы можете просто установить PreferredDisplayMode.AllVisible непосредственно перед тем, как отклонить режим Split View (вместо ViewDidLoad)

Это код Xamarin.iOS, который я использовал в своем master c ontroller. Работает в портрете и пейзаже.

partial void btnExitModalSplitViewControllerAllOrientations_Activated(UIBarButtonItem sender) 
{ 
    SplitViewController.PreferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible; 
    SplitViewController.DismissViewController(true, null); 
} 
Смежные вопросы