通用应用程序中 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 自动旋转