Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在横向方向更改UISplitViewController的UITableViewController主控器的背景图像_Ios_Ipad_Uitableview_Uicollectionview_Uinavigationitem - Fatal编程技术网

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中的实例——这太棒了。再次感谢,并愉快地授予赏金!