我有一个简单的应用程序,它是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];
}
在我的UICollectionView
的didSelectMethod
,我已经放置在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
”显示。但是,主题并没有改变。
如果我切换到人像模式并返回到风景,则会更新主题。
现在看来似乎缺少一个关键要素进行更新,即使我显式调用从UICollectionView
的changeAppThemes
方法。
对此的任何指导将非常感激。
非常感谢@ gabbler - 此答案完美工作,我非常感谢您对此的帮助。它完全理解为什么这不适用于我的代码,因为它创建了一个新实例,而不是使用splitView中的那个 - 这非常棒。再次感谢和赏金愉快地颁奖! – amitsbajaj 2014-10-31 10:46:33
@Lavanya,不客气! – gabbler 2014-10-31 13:03:04