UITableViewCells не изменит цвет при нажатии на - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь сделать опцию «Изменить тему» ​​в моем приложении. По какой-то причине этот код всегда будет каким-то образом делать это так, что когда я нажимаю на ячейку, например, если я нажимаю на «Темную тему» ​​в моем приложении, когда это в настоящее время светлая тема, весь мой код срабатывает, и панель навигации становится темно-серой фон моего табличного изображения становится тем цветом, который должен быть, и т. д., однако «Светлая тема» остается в светлом режиме. Он по-прежнему будет сохранять белый фон и черный текст, если я не вернусь в свой просмотрщик настроек и не введу заново «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

1 Ответ

0 голосов
/ 26 июня 2019

Не изменяйте свойства ячейки tableView из didSeleteRowAtIndexPath.Перезагрузите tableView и поместите условие cellDesign в cellForRowAtIndexPath.Ниже предложение -

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

NSInteger theme = [[NSUserDefaults standardUserDefaults] integerForKey:@"theme"];
    if (indexPath.row == 0) {
       theme = 0;
    }else if (indexPath.row ==1){
       theme = 1;
    }
     [[NSUserDefaults standardUserDefaults] setInteger:theme forKey:@"theme"];
[[NSUserDefaults standardUserDefaults] synchronize];
    [self changeTheme:theme];
     [tableView reloadData];
 }
-(void)changeTheme:(NSInteger)theme{
   if(theme==0){
     // do necessary changes for theme =0 for View Controller except cells
   }else{
     // do necessary changes for theme =1 for View Controller except cells
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...