通用应用程序中 UITabBar 内的 UISplitView 未更新详细信息视图

Posted

技术标签:

【中文标题】通用应用程序中 UITabBar 内的 UISplitView 未更新详细信息视图【英文标题】:UISplitView inside UITabBar in a Universal App not updating Details view 【发布时间】:2011-05-20 16:37:47 【问题描述】:

我正在创建一个在 UITabBar 内使用 UISplitView 的通用应用程序。一切正常(TabBar 导航、PopOver、SplitView 以纵向和横向显示,...)除了当我从 Root SplitView(即 UITableViewController)中选择一个项目时,SplitView 的详细信息视图不会改变...更奇怪的是,只有界面控件不会更新 - 所有变量和方法都被正确调用和使用。

这是我的代码:

来自 AppDelegate.h 的代码块:

@interface DicionarioAppDelegate : NSObject <UIApplicationDelegate> 
UIWindow *window;   
UITabBarController *tabBarController;


@property (nonatomic, retain) IBOutlet UIWindow *window;

来自 AppDelegate.m 的代码块(如果是 iPad):

iPadRootController* rootVC = [[[iPadRootController alloc] initWithNibName:@"iPadSearch" bundle:nil] autorelease];    
    iPadDetailsController* detailsVC = [[[iPadDetailsController alloc] initWithNibName:@"iPadDetails" bundle:nil] autorelease];

    UISplitViewController* splitViewController = [[UISplitViewController alloc] init];
    splitViewController.viewControllers = [NSArray arrayWithObjects:rootVC, detailsVC, nil];
    splitViewController.delegate = detailsVC;
    splitViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Search" 
                                                                   image:[UIImage imageNamed:@"search.png"] 
                                                                   tag:0];

    // Add them as children of the tab bar controller
    tabBarController.viewControllers = [NSArray arrayWithObjects:
                                        splitViewController, 
                                        secondController,
                                        thirdController,
                                        nil];

    [splitViewController release];

来自 iPadRootViewController.h 的代码块:

@property (nonatomic, retain) iPadDetailsController *detailsController;

来自 iPadRootViewController.m 的代码块(当项目被选中时):

iPadDetailsController *newDetailViewController = [[iPadDetailsController alloc] initWithNibName:@"iPadDetails" bundle:nil];
self.detailsController = newDetailViewController;
self.detailsController.detailItem = id;

来自 iPadDetailViewController.h 的代码块:

@property (nonatomic, retain) IBOutlet UILabel *someLabel;

在 iPadDetailsViewController.m 中,我可以将 detailItem 值分配给变量(并且所有方法都在工作),但与接口相关的任何内容都保持为空。代码块:

if (detailItem != newDetailItem) 
    [detailItem release];
    detailItem = [newDetailItem retain];
    self.word = [detailItem description];
    self.someLabel.text = [detailItem description];

    //Update the view
    ...

在这种情况下,self.word 获得正确的值,但 self.someLabel 文本属性不会(保持为空)。我是 iPhone/iPad 编程的新手,但我相信我正确连接了所有网点。

请帮帮我...我要疯了。任何想法表示赞赏!

我正在使用 XCode 4。 谢谢!

【问题讨论】:

【参考方案1】:

每次您想显示一个项目时,您都在创建一个新的iPadDetailsViewController 对象。不仅没有连接这个新对象,而且这样做也是错误的。您必须在应用程序委托中设置detailsController

iPadRootController* rootVC = [[[iPadRootController alloc] initWithNibName:@"iPadSearch" bundle:nil] autorelease];    
iPadDetailsController* detailsVC = [[[iPadDetailsController alloc] initWithNibName:@"iPadDetails" bundle:nil] autorelease];
rootVC.detailsController = detailsVC;
...

iPadRootViewController.m 中的代码块会变成——

self.detailsController.detailItem = id;

【讨论】:

除了完全有道理之外,它真的就在我面前!谢谢一百万..现在一切正常!

以上是关于通用应用程序中 UITabBar 内的 UISplitView 未更新详细信息视图的主要内容,如果未能解决你的问题,请参考以下文章

仅自动旋转 UITabBar 内的一些选项卡? (iOS 5)

UITabBar 内的单个 UIViewController 自动旋转

无法访问 UITabBar 内的 UITabBarItem(s)

iPad显示不在Tabbar内的视图

UITabbar 背景图像重复出现

iPhone + UITabBar