Three20 - 纵向模式下的拆分视图控制器
Posted
技术标签:
【中文标题】Three20 - 纵向模式下的拆分视图控制器【英文标题】:Three20 - TTSplitViewController in portrait mode 【发布时间】:2011-08-15 13:56:30 【问题描述】:我正在 iPad 上运行 Three20 示例中的 TTCatalog 项目(不对其进行修改)。
我注意到,当应用程序处于纵向模式时,我无法通过单击左上角的 Bar 按钮项显示的 Pop over 更改“详细信息”视图控制器(或 rightNavigator
)内容。
如果我将设备旋转到横向,我可以选择任何leftNavigator
项目并在rightNavigator
上查看它们的对应内容。
如何使用TTSplitViewController
在纵向上达到同样的效果?
谢谢
更新
此问题仅在使用 ios 5.0 时出现,在 iOS 4.3 上运行即可。
【问题讨论】:
【参考方案1】:我昨天遇到了同样的问题。
我在 TTBaseNavigator.m 中写了一条到 three20 主干的路径,将 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 上发现了一个 pull request 正在修复它。我觉得它比我的好。你可以在这里找到它:https://github.com/facebook/three20/pull/746
希望有帮助
【讨论】:
以上是关于Three20 - 纵向模式下的拆分视图控制器的主要内容,如果未能解决你的问题,请参考以下文章