简体   繁体   中英

UISplitView inside UITabBar in a Universal App not updating Details view

I'm creating an Universal App that uses a UISplitView inside an UITabBar. Everything is working fine (TabBar navigation, PopOver, SplitView showing up in both portrait and landscape,...) except that when I select an item from the Root SplitView (that is a UITableViewController) the Details view of the SplitView won't change... and even more strange, only the interface controls won't update - all the variables and methods are correctly called and used.

Here's my code:

Code block from AppDelegate.h:

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

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

Code block from AppDelegate.m (if 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];

Code block from iPadRootViewController.h:

@property (nonatomic, retain) iPadDetailsController *detailsController;

Code block from iPadRootViewController.m (when items gets selected):

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

Code block from iPadDetailViewController.h:

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

And in iPadDetailsViewController.m, I can assign detailItem value to a variable (and all methods are working) but anything that's interface related stays null. Code block:

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

    //Update the view
    ...
}

In this case, self.word gets the correct value but self.someLabel text property won't (stays null). I'm new to iPhone/iPad programming but I believe I'm linking all outlets correctly.

Please help me... I'm going nuts on this. Any ideas appreciated!

I'm using XCode 4. Thanks!

You are creating a new iPadDetailsViewController object every time you want to display an item. Not only is this new object not wired in, it is also wrong thing to do. You will have to set the detailsController in the application delegate –

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

and the code block in iPadRootViewController.m would become –

self.detailsController.detailItem = id;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM