Авторация отключена после установки свойства selectedIndex для UITabBarControllers (ошибка SDK?) - PullRequest
1 голос
/ 19 января 2011

Проблема. Я получаю очень странную ошибку в моем приложении.У меня есть UITabBarController с несколькими контроллерами представления для вкладок.В контроллерах вида я реализовал автоматическое вращение через shouldAutorotateToInterfaceOrientation:, и оно работало нормально, пока я не сделал следующее изменение.

Я реализовал жесты смахивания в контроллерах вида для переключения между вкладками.Это выполняется с помощью следующего кода.

- (void)onSwipeLeft {
  int _count = [[self.tabBarController.tabBar items] count];
  int i = self.view.tag - 1;
  if (i < _count - 1) {
    self.tabBarController.selectedIndex = (i + 1) % _count;
  }
}

И аналогично для onSwipeRight.

Теперь автоповорот работает только , пока вы не проведете пальцем влево или вправо .После этого shouldAutorotateToInterfaceOrientation: никогда не вызывается вообще.

См. Также.

  • В этот поток идентичныйпроблема описана.Я также иногда вижу сообщение в журнале, подобное следующему: -[UIWindow beginDisablingInterfaceAutorotation] overflow on <UIWindow: 0x1410e0; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x141190>>. Ignoring. Я не могу найти никакой другой информации об этом.

  • Этот вопрос , кажется, описываетта же проблема.

  • Этот вопрос , похоже, описывает аналогичную проблему, но с popViewController:.Обратите внимание, что ошибка существует с SDK 3.2.

Что делать? Похоже, ошибка в SDK, которая все еще присутствует в 4.1.Кто-нибудь нашел обходной путь?Это похоже на общий сценарий.

1 Ответ

0 голосов
/ 20 января 2011

Я должен был подумать об этом раньше.

Создать UIWindow+ensureAutorotation.h:

#import <UIKit/UIKit.h>

@interface UIWindow (ensureAutorotation)

- (void)beginDisablingInterfaceAutorotation;
- (void)endDisablingInterfaceAutorotation;

@end

И UIWindow+ensureAutorotation.m:

#import "UIWindow+ensureAutorotation.h"

@implementation UIWindow (ensureAutorotation)

- (void)beginDisablingInterfaceAutorotation {}
- (void)endDisablingInterfaceAutorotation{}

@end

// of course this can be added as a simple category, rather than .h .m files
...