以横向更改 UISplitViewController 的 UITableViewController Master 的背景图像
Posted
技术标签:
【中文标题】以横向更改 UISplitViewController 的 UITableViewController Master 的背景图像【英文标题】:Changing the background image of a UITableViewController Master of a UISplitViewController in Landscape orientation 【发布时间】:2014-10-27 13:17:49 【问题描述】:我有一个简单的应用程序,它是UITableViewController
s、UIViewController
s 和UISplitViewController
s 的组合。我现在将横向方向带入我的 iPad 应用程序。
我对其进行了配置,以便在纵向中,Master View
隐藏在 UIBarButtonItem
后面,在横向中,主视图和详细视图都显示。我在我的应用程序中构建了自定义主题,它改变了背景和UINavigationBar
以匹配所选主题。
问题
在横向和主题选择页面中,主视图是菜单 (UITableViewController
),细节是主题选择页面 (UICollectionView
)。如果我选择一个主题,UICollectionView
会立即更新其背景以代表新主题。但是,主视图不会更新其主题。这就是问题所在。
在纵向模式下,Master 会更新,因为在它的 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
方法。
对此的任何指导将不胜感激。
【问题讨论】:
【参考方案1】:如果你通过xcode创建一个默认设置的UISplitViewController项目,我认为你可以通过这种方式获得MasterTableViewController。
NSArray *viewControllers = self.splitViewController.viewControllers;
UINavigationController *controller = viewControllers[0];
MasterViewController * masterController = (MasterViewController *)controller.topViewController;
[masterController changeAppThemes];
请确保您在 splitViewController 的视图控制器中获取 masterController 而不是创建一个新的,新的不在 splitViewController 中。
【讨论】:
非常感谢@gabbler - 这个答案非常有效,我非常感谢您在这方面的帮助。为什么这不能与我的代码一起使用是完全有道理的,因为它正在创建一个新实例,而不是使用 splitView 中的实例 - 这太棒了。再次感谢并愉快地获得赏金!以上是关于以横向更改 UISplitViewController 的 UITableViewController Master 的背景图像的主要内容,如果未能解决你的问题,请参考以下文章