Ios 在横向方向更改UISplitViewController的UITableViewController主控器的背景图像
我有一个简单的应用程序,它是Ios 在横向方向更改UISplitViewController的UITableViewController主控器的背景图像,ios,ipad,uitableview,uicollectionview,uinavigationitem,Ios,Ipad,Uitableview,Uicollectionview,Uinavigationitem,我有一个简单的应用程序,它是UITableViewControllers、UIViewControllers和UISplitViewControllers的组合。我现在将横向定位功能引入我的iPad应用程序 我对其进行了配置,以便在纵向视图中,主视图隐藏在uibarbuttoneim后面,在横向视图中,主视图和详细视图都显示出来。我在我的应用程序中构建了自定义主题,可以更改背景和UINavigationBar以匹配所选主题 问题 在横向和主题选择页面中,主视图是菜单(UITableViewCon
UITableViewController
s、UIViewController
s和UISplitViewController
s的组合。我现在将横向定位功能引入我的iPad应用程序
我对其进行了配置,以便在纵向视图中,主视图
隐藏在uibarbuttoneim
后面,在横向视图中,主视图和详细视图都显示出来。我在我的应用程序中构建了自定义主题,可以更改背景和UINavigationBar
以匹配所选主题
问题
在横向和主题选择页面中,主视图是菜单(UITableViewController
),详细信息是主题选择页面(UICollectionView
)。如果我选择了一个主题,则UICollectionView
会立即更新其背景以表示新主题。但是,主视图不会更新其主题。这就是问题所在
在纵向模式下,母版会被更新,因为在它的视图中将出现,我调用了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];
}
[[NSUserDefaults standardUserDefaults] setObject:self.selectedTheme forKey:@"Theme"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self changeAppThemes];
MasterTableViewController *master = [[MasterTableViewController alloc] init];
[master changeAppThemes];
在我的UICollectionView
的didSelectMethod
中,我调用了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];
}
[[NSUserDefaults standardUserDefaults] setObject:self.selectedTheme forKey:@"Theme"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self changeAppThemes];
MasterTableViewController *master = [[MasterTableViewController alloc] init];
[master changeAppThemes];
这是在横向模式下工作的,因为显示了NSLog
“这被称为
”。然而,主题没有改变
如果我切换到纵向模式并返回到横向模式,则会更新主题
它似乎缺少一个要更新的关键元素,即使我从UICollectionView
显式调用changeAppThemes
方法
如果您能就此提供指导,我们将不胜感激 如果您通过xcode创建一个带有默认设置的UISplitViewController项目,我认为您可以通过这种方式在detailView中获得MasterTableViewController
NSArray *viewControllers = self.splitViewController.viewControllers;
UINavigationController *controller = viewControllers[0];
MasterViewController * masterController = (MasterViewController *)controller.topViewController;
[masterController changeAppThemes];
请确保您在splitViewController的ViewController中获得masterController,而不是创建一个新的主控制器,新的主控制器不在splitViewController中。非常感谢@gabbler-这个答案非常有效,我非常感谢您在这方面的帮助。这完全可以解释为什么我的代码不能使用它,因为它创建了一个新实例,而不是使用splitView中的实例——这太棒了。再次感谢,并愉快地授予赏金!