2014-10-27 59 views
0

我有一個簡單的應用程序,它是UITableViewController s,UIViewController s和UISplitViewController s的組合。我現在將「橫向」導向到我的iPad應用程序。在橫向上更改UITplitViewController的UITableViewController主背景圖像

我已將其配置爲使縱向中的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]; 

    } 

在我的UICollectionViewdidSelectMethod,我已經放置在changeAppThemes方法的調用:

[[NSUserDefaults standardUserDefaults] setObject:self.selectedTheme forKey:@"Theme"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
[self changeAppThemes]; 

MasterTableViewController *master = [[MasterTableViewController alloc] init]; 
[master changeAppThemes]; 

即在風景模式下工作,因爲NSLogThis is getting called」顯示。但是,主題並沒有改變。

如果我切換到人像模式並返回到風景,則會更新主題。

現在看來似乎缺少一個關鍵要素進行更新,即使我顯式調用從UICollectionViewchangeAppThemes方法。

對此的任何指導將非常感激。

回答

2

我想你可以通過這種方式在detailView中獲取MasterViewViewController,如果你通過xcode的默認設置創建一個UISplitViewController項目。

NSArray *viewControllers = self.splitViewController.viewControllers; 
UINavigationController *controller = viewControllers[0]; 
MasterViewController * masterController = (MasterViewController *)controller.topViewController; 
[masterController changeAppThemes]; 

請確保您得到masterController在splitViewController的viewcontrollers而不是創建一個新的,新的一個不是裏面splitViewController。

+0

非常感謝@ gabbler - 此答案完美工作,我非常感謝您對此的幫助。它完全理解爲什麼這不適用於我的代碼,因爲它創建了一個新實例,而不是使用splitView中的那個 - 這非常棒。再次感謝和賞金愉快地頒獎! – amitsbajaj 2014-10-31 10:46:33

+0

@Lavanya,不客氣! – gabbler 2014-10-31 13:03:04