我有一个简单的应用程序,它是UITableViewController
s,UIViewController
和UISplitViewController
的组合。我现在将横向定位带到我的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
方法。
对此的任何指导都将非常感激。
答案 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中。