Я пытаюсь сделать опцию «Изменить тему» в моем приложении. По какой-то причине этот код всегда будет каким-то образом делать это так, что когда я нажимаю на ячейку, например, если я нажимаю на «Темную тему» в моем приложении, когда это в настоящее время светлая тема, весь мой код срабатывает, и панель навигации становится темно-серой фон моего табличного изображения становится тем цветом, который должен быть, и т. д., однако «Светлая тема» остается в светлом режиме. Он по-прежнему будет сохранять белый фон и черный текст, если я не вернусь в свой просмотрщик настроек и не введу заново «ChangeThemeViewController». Я в тупике, я часами пытался это исправить. Кто-нибудь знает, почему это происходит и как я могу это исправить? Вот мой код.
#import "ChangeThemeViewController.h"
@interface ChangeThemeViewController ()
@end
@implementation ChangeThemeViewController {
NSArray *tableData;
NSInteger theme;
NSString *simpleTableIdentifier;
UITableViewCell *cell;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSInteger theme = [[NSUserDefaults standardUserDefaults]
integerForKey:@"theme"];
[[NSUserDefaults standardUserDefaults] setInteger:theme forKey:@"theme"];
[[NSUserDefaults standardUserDefaults] synchronize];
//add variable for theme here
// if (theme == 0) {
// self.tableView.backgroundColor = [UIColor groupTableViewBackgroundColor];
//
// self.navigationController.navigationBar.barTintColor = nil;
// _tableView.indicatorStyle = UIScrollViewIndicatorStyleBlack;
// [self.navigationController.navigationBar
// setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blackColor]}];
// }
//
//
// if (theme == 1) {
// self.tableView.backgroundColor = [UIColor blackColor];
//
// self.navigationController.navigationBar.barTintColor = [UIColor darkGrayColor];
// _tableView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
// [self.navigationController.navigationBar
// setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
// }
tableData = [NSArray arrayWithObjects:@"Light Theme", @"Dark Theme", nil];
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
simpleTableIdentifier = @"SimpleTableItem";
cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
//add variable for theme here
NSInteger theme = [[NSUserDefaults standardUserDefaults]
integerForKey:@"theme"];
if (theme == 0) {
NSLog(@"theme is 0, running cellforrowindexpath");
cell.textLabel.textColor = [UIColor blackColor];
cell.backgroundColor = [UIColor whiteColor];
self.navigationController.navigationBar.tintColor = nil;
tableView.backgroundColor = [UIColor groupTableViewBackgroundColor];
}
if (theme == 1) {
NSLog(@"theme is 1, running cellforrowindexpath");
UIColor *color = [UIColor colorWithRed:30/255.0
green:30/255.0
blue:30/255.0
alpha:1];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
cell.textLabel.textColor = [UIColor whiteColor];
cell.backgroundColor = [UIColor blackColor];
tableView.backgroundColor = color;
}
if (indexPath.section == 0) {
if (indexPath.row == 0) {
cell.textLabel.text = [tableData objectAtIndex:0];
}
if (indexPath.row == 1) {
cell.textLabel.text = [tableData objectAtIndex:1];
}
}
}
return cell;
}
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[[NSUserDefaults standardUserDefaults] setInteger:theme forKey:@"theme"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSInteger theme = [[NSUserDefaults standardUserDefaults] integerForKey:@"theme"];
if (indexPath.row == 0) {
[tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
NSLog(@"row 0 picked should change into light mode");
theme = 0;
[[NSUserDefaults standardUserDefaults] setInteger:theme forKey:@"theme"];
[[NSUserDefaults standardUserDefaults] synchronize];
self.tableView.backgroundColor = [UIColor groupTableViewBackgroundColor];
self.navigationController.navigationBar.barTintColor = nil;
_tableView.indicatorStyle = UIScrollViewIndicatorStyleBlack;
[self.navigationController.navigationBar
setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blackColor]}];
self.navigationController.navigationBar.tintColor = nil;
}
if (indexPath.row == 1) {
[tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
NSLog(@"row 1 picked should change into dark mode");
theme = 1;
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
[[NSUserDefaults standardUserDefaults] setInteger:theme forKey:@"theme"];
[[NSUserDefaults standardUserDefaults] synchronize];
UIColor *color = [UIColor colorWithRed:30/255.0
green:30/255.0
blue:30/255.0
alpha:1];
self.tableView.backgroundColor = color;
self.navigationController.navigationBar.barTintColor = [UIColor darkGrayColor];
_tableView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
[self.navigationController.navigationBar
setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
}
if (theme == 0) {
cell.backgroundColor = [UIColor whiteColor];
cell.textLabel.textColor = [UIColor blackColor];
}
if (theme == 1) {
cell.backgroundColor = [UIColor blackColor];
cell.textLabel.textColor = [UIColor whiteColor];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 2;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
@end