У меня есть простое приложение, которое представляет собой комбинацию UITableViewController
s, UIViewController
s и UISplitViewController
s. Сейчас я привожу ландшафтную ориентацию в свое приложение для iPad.Изменение фонового изображения UITableViewController Мастер UISplitViewController в альбомной ориентации
У меня он сконфигурирован так, что в Portrait, Master View
скрыт за UIBarButtonItem
, а в ландшафте отображаются оба уровня мастера и детали. У меня есть собственные темы в моем приложении, которые меняют фон и UINavigationBar
в соответствии с выбранной темой.
Выпуск
Когда в ландшафтном и на странице выбора темы, вид Мастер меню (UITableViewController
) и Detail страница Выбор темы (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];
}
В пределах моей didSelectMethod
от UICollectionView
, я поставил вызов метода 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
». Однако темы не меняются.
Если я перейду в портретный режим и вернусь к пейзажу, тема будет обновлена.
Кажется, что отсутствует один ключевой элемент для обновления, хотя я явно вызываю метод changeAppThemes
из UICollectionView
.
Любые рекомендации по этому вопросу будут действительно оценены.
Большое спасибо @gabbler - этот ответ работал отлично, и я так благодарен за вашу помощь в этом. Понятно, почему это не сработало с моим кодом, потому что он создавал новый экземпляр вместо использования в splitView - это блестяще. Еще раз спасибо, и награда счастливо награждена! – amitsbajaj
@Lavanya, добро пожаловать! – gabbler