2014-10-27 38 views
0

我有一个简单的应用程序,它是UITableViewController s,UIViewController s和UISplitViewController s的组合。我现在将“横向”导向到我的iPad应用程序。在横向上更改UITplitViewController的UITableViewController主背景图像

我已将其配置为使纵向中的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]; 

    } 

在我的UICollectionViewdidSelectMethod,我已经放置在changeAppThemes方法的调用:

[[NSUserDefaults standardUserDefaults] setObject:self.selectedTheme forKey:@"Theme"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
[self changeAppThemes]; 

MasterTableViewController *master = [[MasterTableViewController alloc] init]; 
[master changeAppThemes]; 

即在风景模式下工作,因为NSLogThis is getting called”显示。但是,主题并没有改变。

如果我切换到人像模式并返回到风景,则会更新主题。

现在看来似乎缺少一个关键要素进行更新,即使我显式调用从UICollectionViewchangeAppThemes方法。

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

回答

2

我想你可以通过这种方式在detailView中获取MasterViewViewController,如果你通过xcode的默认设置创建一个UISplitViewController项目。

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

请确保您得到masterController在splitViewController的viewcontrollers而不是创建一个新的,新的一个不是里面splitViewController。

+0

非常感谢@ gabbler - 此答案完美工作,我非常感谢您对此的帮助。它完全理解为什么这不适用于我的代码,因为它创建了一个新实例,而不是使用splitView中的那个 - 这非常棒。再次感谢和赏金愉快地颁奖! – amitsbajaj 2014-10-31 10:46:33

+0

@Lavanya,不客气! – gabbler 2014-10-31 13:03:04