Three20 - TTSplitViewController в портретном режиме - PullRequest
1 голос
/ 15 августа 2011

Я запускаю проект TTCatalog (без его изменения) из сэмплов Three20 на iPad.

Я заметил, что когда приложение находится в портретном режиме, я не могу изменить представление «Подробности»Контроллер (или rightNavigator) содержимое через всплывающее окно, которое отображается при нажатии в верхнем левом углу кнопки панели.

Если я поверну устройство в альбомную ориентацию, я могу выбрать любой из leftNavigator элементы и увидеть их соответствующее содержание на rightNavigator.

Как можно добиться того же эффекта в портретной ориентации, используя TTSplitViewController?

Спасибо

ОБНОВЛЕНИЕ

Эта проблема возникает только при использовании iOS 5.0, при работе на iOS 4.3 все в порядке.

1 Ответ

0 голосов
/ 23 марта 2012

Я столкнулся с той же проблемой вчера.

Я написал путь к стволу Three20 в TTBaseNavigator.m, заменив navigatorForView: view следующим

+ (TTBaseNavigator*)navigatorForView:(UIView*)view {
  // If this is called with a UIBarButtonItem, we can't traverse a view hierarchy to find the
  // navigator, return the global navigator as a fallback.
  if (![view isKindOfClass:[UIView class]]) {
    return [TTBaseNavigator globalNavigator];
  }

  id<TTNavigatorRootContainer>  container = nil;
  UIViewController*             controller = nil;      // The iterator.
  UIViewController*             pcontroller = nil;      // The iterator.
  UIViewController*             childController = nil; // The last iterated controller.

  for (controller = view.viewController;
       nil != controller;
       controller = controller.parentViewController) {
    for (pcontroller = controller;
         nil != pcontroller;
         pcontroller = pcontroller.splitViewController) {
      if ([pcontroller conformsToProtocol:@protocol(TTNavigatorRootContainer)]) {
        container = (id<TTNavigatorRootContainer>)pcontroller;
        break;
      }
    }
    if ([controller conformsToProtocol:@protocol(TTNavigatorRootContainer)]) {
      container = (id<TTNavigatorRootContainer>)controller;
      break;
    }

    childController = controller;
  }

  TTBaseNavigator* navigator = [container getNavigatorForController:childController];
  if (nil == navigator) {
    navigator = [TTBaseNavigator globalNavigator];
  }

  return navigator;
}

Этим утром я обнаружил запрос на удаление, исправляющий github.Я думаю, что это лучше, чем у меня.Вы можете найти его здесь: https://github.com/facebook/three20/pull/746

Надеюсь, что эта помощь

...