以横向方向更改UISplitViewController的UITplitViewController的背景图像

时间:2014-10-27 13:17:49

标签: ios ipad uitableview uicollectionview uinavigationitem

我有一个简单的应用程序,它是UITableViewController s,UIViewControllerUISplitViewController的组合。我现在将横向定位带到我的iPad应用程序。

我对其进行了配置,以便在纵向中,Master View隐藏在UIBarButtonItem后面,在横向中,主要和详细视图都显示。我在我的应用程序中构建了自定义主题,用于更改背景和UINavigationBar以匹配所选主题。

问题

在横向和主题选择页面中,主视图是菜单(UITableViewController),详细信息是主题选择页面(UICollectionView)。如果我选择一个主题,UICollectionView会立即更新它的背景以表示新主题。但是,主视图不会更新主题。这是问题所在。

在纵向模式下,主人会更新,因为在viewWillAppear内,我调用changeAppThemes方法:

- (void)changeAppThemes
{    
    NSLog(@"This is getting called");
    self.selectedTheme = [[NSUserDefaults standardUserDefaults] objectForKey:@"Theme"];

    if ([self.selectedTheme isEqualToString:@"Mystical"])
    {
        ThemeManager *themeManager = [ThemeManager sharedManager];

        themeManager.backgrounds = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"PurplepinkIPAD.png"]];       
        self.tableView.backgroundView = themeManager.backgrounds;
        UIImage *navBackgroundImage = [UIImage imageNamed:@"Purplepinknav.png"];
        [[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

    }

在我didSelectMethod的{​​{1}}内,我调用了UICollectionView方法:

changeAppThemes

这是在横向模式下工作,因为会显示 [[NSUserDefaults standardUserDefaults] setObject:self.selectedTheme forKey:@"Theme"]; [[NSUserDefaults standardUserDefaults] synchronize]; [self changeAppThemes]; MasterTableViewController *master = [[MasterTableViewController alloc] init]; [master changeAppThemes]; NSLog”。但是,主题并没有改变。

如果我更改为纵向模式并返回横向,则会更新主题。

似乎它缺少一个要更新的关键元素,即使我明确地从This is getting called调用changeAppThemes方法。

对此的任何指导都将非常感激。

1 个答案:

答案 0 :(得分:2)

如果您通过xcode创建一个默认设置的UISplitViewController项目,我认为您可以通过这种方式获取详细的MasterTableViewController。

NSArray *viewControllers = self.splitViewController.viewControllers;
UINavigationController *controller = viewControllers[0];
MasterViewController * masterController = (MasterViewController *)controller.topViewController;
[masterController changeAppThemes];

请确保在splitViewController的viewcontrollers中获取masterController,而不是创建一个新的,新的不在splitViewController中。