UISwitch неожиданно изменил цвет фона с clearColor на whiteColor - PullRequest
0 голосов
/ 07 января 2019

Итак, у меня есть UIS-переключатель, для которого backgroundColor уже установлен в clearColor в tableViewCell.m:

- (instancetype)initWithStyle:(UITableViewCellStyle)style 
reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) 
{

    self.selectionStyle = UITableViewCellSelectionStyleNone;
    self.backgroundColor = [UIColor colorWithHexString:@"#333333"];

    [self initUI];
}
return self;
}

- (void)initUI {
[self addSubview:self.topLine];
[self addSubview:self.imgView];
[self addSubview:self.titleLab];
[self addSubview:self.rightView];
[self addSubview:self.rightSwitch];
[self addSubview:self.cellLine];
[self addSubview:self.bottomLine];
}

- (UISwitch *)rightSwitch {
if (!_rightSwitch) {
    self.rightSwitch = [[UISwitch alloc] init];
    self.rightSwitch.frame = CGRectMake(253*kScaleXAndWidth, 8*kScaleYAndHeight, 51*kScaleXAndWidth, 31*kScaleYAndHeight);
    self.rightSwitch.hidden = YES;
    [self.rightSwitch setBackgroundColor:[UIColor clearColor]];
    [self.rightSwitch addTarget:self action:@selector(rightSwitchClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _rightSwitch;
}

rightSwitchClick - это блок, затем в cellForRowAtIndexPath TableViewController.m:

QuickLoginCell *cell = [tableView dequeueReusableCellWithIdentifier:QuickLoginCellID forIndexPath:indexPath];
cell.rightView.hidden = YES;
cell.rightSwitch.hidden = NO;
__block QuickLoginCell *blockCell = cell;
 if (isIDlogin) {
            [cell.rightSwitch setEnabled:NO];
        }
        else{
            [cell.rightSwitch setEnabled:YES];
        }
        cell.rightSwitch.on = NO;
        cell.bottomLine.hidden = NO;
        if (![BetwayUtils isEmptyString:patternLock]) {
            cell.rightSwitch.on = YES;
            cell.bottomLine.hidden = YES;
        }

        [cell.imgView setImage:[UIImage imageNamed:@"ic_patternLock"]];
  cell.rightSwitchAddClick = ^{
            if (blockCell.rightSwitch.on) {
                PatternLockViewController *vc = [PatternLockViewController new];

                [strongSelf.navigationController pushViewController:vc animated:YES];
            }
            else{

            }
        };

поэтому при включении он будет напрямую переходить к PatternLockViewController, а после того, как я установлю patternLock, он снова перейдет к TableViewController, и теперь переключатель будет включен. проблема в том, что когда я пытаюсь выключить его, backgroundColor внезапно меняется на белый, например:

whiteBackground UISwitch

Когда я удаляю:

            PatternLockViewController *vc = [PatternLockViewController new];

            [strongSelf.navigationController pushViewController:vc animated:YES]; 

так что внутри блока нет кода и UISwitch backgroundColor - clearColor, я попытался включить и выключить, и он работает, как и должно быть. так что я немного запутался в этом вопросе, так как я не устанавливаю UISwitch backgroundColor на белый где-либо.

UPDATE

Уже пытались использовать делегат для обновления таблицы при извлечении из patternlockviewcontroller, но безрезультатно

1 Ответ

0 голосов
/ 25 января 2019

Я решаю это с помощью:

- (void)prepareForReuse {
[super prepareForReuse];

[self.rightSwitch setBackgroundColor:[UIColor clearColor]];
[self.rightSwitch setTintColor:[UIColor whiteColor]];
[self.rightSwitch setThumbTintColor:[UIColor whiteColor]];
}

на моем tableViewCell.m Я надеюсь, что это поможет кому-то здесь.

...