以横向更改 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 【问题描述】:

我有一个简单的应用程序,它是UITableViewControllers、UIViewControllers 和UISplitViewControllers 的组合。我现在将横向方向带入我的 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];

    

UICollectionViewdidSelectMethod 中,我调用了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 的背景图像的主要内容,如果未能解决你的问题,请参考以下文章

如何更改纵向模式

以编程方式更改 Frame 位置

以横向模式打印报告

滚动条在 IOS APP 中未以横向模式显示

如何以编程方式将 UIViewController 的方向更改为横向?

仅以纵向启动应用程序