iOS (cs193p): Почему к моим методам делегата UISplitViewControllerDelegate не обращаются изменение ориентации?

Я следую за потрясающим Стэнфордом cs193p курс о iTunes, и я теперь в лекции № 7 и домашняя работа № 3.

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

Вот то, что я получил до сих пор:

- Я создал совершенно новую Раскадровку iPad, добавил SplitViewController с UIViewController как Владелец (CalculatorViewController) и другой UIViewController как Деталь (GraphViewController). Я думаю, что сделал все правильно.

- Мой GraphViewController.h осуществляет протокол UISplitViewControllerDelegate:

@interface GraphViewController : UIViewController 

- Мой GraphViewController.m устанавливает делегата SplitViewController в себе:

- (void)awakeFromNib {
    [super awakeFromNib];
    self.splitViewController.delegate = self;
}

- Мой GraphViewController.m осуществляет необходимые методы:

// asks the delegate whether the first view controller should be hidden for the specified orientation
- (BOOL)splitViewController:(UISplitViewController *)svc 
   shouldHideViewController:(UIViewController *)vc 
              inOrientation:(UIInterfaceOrientation)orientation
{
   //only show the master controller in landscape mode
    return UIInterfaceOrientationIsPortrait(orientation);
}

// tells the delegate that the specified view controller is about to be hidden (must add a popover button)
- (void)splitViewController:(UISplitViewController *)svc 
     willHideViewController:(UIViewController *)aViewController 
          withBarButtonItem:(UIBarButtonItem *)barButtonItem 
       forPopoverController:(UIPopoverController *)pc
{
    barButtonItem.title = aViewController.title;

   //add the button to the toolbar
    NSMutableArray *toolbarItems = [self.toolbar.items mutableCopy];
    [toolbarItems insertObject:barButtonItem atIndex:0];
    self.toolbar.items = toolbarItems; 
}

// tells the delegate that the specified view controller is about to be shown again (must remove popover button)
- (void) splitViewController:(UISplitViewController *)svc 
      willShowViewController:(UIViewController *)aViewController 
   invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{    
   //hide the bar button item on the detail controller
    NSMutableArray *toolbarItems = [self.toolbar.items mutableCopy];
    [toolbarItems removeObject:barButtonItem];
    self.toolbar.items = toolbarItems;
}

- Мой GraphViewController.m поддерживает все ориентации:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    return YES;//support all types of orientation
}

Теперь, когда я запускаю приложение (Xcode 4.2 на снежном барсе, iOS 5.0, Симуляторе iPad 5.0), splitViewController:willHideViewController:withBarButtonItem:forPopoverController: метод называют, моя Основная точка зрения скрыта, и кнопка, как показывают с моей точки зрения Детали показывает Основное представление в PopOver (причина, я нахожусь в режиме портрета).

Однако, когда я изменяю ориентацию устройства (к альбомному режиму... все еще использование симулятора), ничего не происходит, ни один из вышеупомянутых методов не называют снова. Я заканчиваю с Основным представлением, все еще скрытым и кнопка PopOver, все еще показанная, когда на самом деле, я хотел бы, чтобы Основное представление было показано и кнопка PopOver, которая будет скрыта.

Что я делаю неправильно? Действительно ли это - проблема с моим кодом, с XCode, с симулятором?

1
nl ja de
@MarkE - you' ре, ошибочное, когда вы говорите это won' t быть названным, если you' ре, работающее на iOS 5. Это не то, как это работает. shouldAutorotateToInterface будут всегда называть на iOS 5, независимо от того, собрали ли вы набор из двух предметов с 6 SDK или нет.
добавлено автор lxt, источник
если вы используете iOS 6 SDK для компилирования, этот метод - (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOri‌ ​ entation) toInterface‌ ​ Ориентация удерживается от использования, и это не назовут, даже если вы будете управлять им на iOS 5
добавлено автор Mark E, источник
@MarkE: Спасибо, но не, как определено на моем посту, I' m использование Xcode 4.2 на снежном барсе, iOS 5.0 и Симуляторе iPad 5.0. Я don' t хотят модернизировать все же, как я хочу иметь ту же самую среду разработки как курс iTunes
добавлено автор Pascal, источник

1 ответы

Решенная проблема!

В случае, если это могло бы помочь другим, вот то, что я забыл делать.

В моем CalculatorViewController (Владелец SplitViewController), я должен был позволить изменениям ориентации заниматься ландшафтным дизайном для iPad, но не для iPhone:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{
    if (self.splitViewController) return YES; 
    else return UIInterfaceOrientationIsPortrait(toInterfaceOrientation);
}

Я сделал это для GraphViewController (Деталь SplitViewController), но забыл делать это для CalculatorViewController... моя ошибка!

1
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.