UISplitView внутри UITabBar в универсальном приложении не обновляет представление сведений - PullRequest
0 голосов
/ 20 мая 2011

Я создаю универсальное приложение, которое использует UISplitView внутри UITabBar.Все работает нормально (навигация по TabBar, PopOver, SplitView, отображаемая как в книжной, так и в альбомной ориентации, ...) за исключением того, что когда я выбираю элемент из корневого 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 Ответ

0 голосов
/ 20 мая 2011

Вы создаете новый объект 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;
...