gpt4 book ai didi

ios - viewWillAppear 期间的静态 UITableViewCell 更改未反射(reflect)在显示中

转载 作者:可可西里 更新时间:2023-11-01 05:37:12 26 4
gpt4 key购买 nike

我正在使用 Storyboard 中配置的一些静态 UITableViewCell 来显示一些设置信息。

如果关闭其中一个设置,则应禁用其他一些单元格。

为了将单元格置于正确的状态,在 viewWillAppear 期间,我从 NSUserDefaults 读取设置,然后相应地更改单元格。

- (void) viewWillAppear:(BOOL)animated
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"OtherCellEnabled"]) {
[self otherCell].alpha = 1.0;
[self otherCell].userInteractionEnabled = YES;
}
else {
NSLog(@"Changing alpha to 0.3");
[self otherCell].alpha = 0.3;
[self otherCell].userInteractionEnabled = NO;
}

问题是,当我实际运行该程序时,即使它在日志中说 alpha 已更改,但 alpha 实际上并没有更改。 userInteractionEnabled 似乎保持不变,但 alpha 保留为 1.0。

这不是cell复用的问题,也不是cell没有及时实例化的问题,其他的设置改一下就好了。

将它从 cell.alpha 更改为 cell.contentView.alpha 有效,但这是一个不同的设置。

除了 alpha 设置外,似乎所有设置都“固定”了,它不知何故被覆盖了。

最佳答案

我正在回答我自己的问题,因为我能够解决它。

首先,我尝试将 alpha 更改放入 cellForRowAtIndexPath 中,但这也不起作用。经过大量修改后,我得出的结论是 UITableViewCell 的 alpha 设置有些特殊,因为它不断被覆盖或设置为 1.0。

我找到了两个修复:

首先,不要在cellForRowAtIndexPath 中进行更改,而是在UITableViewDelegate 方法willDisplayCell 中进行更改。无论出于何种原因,在此方法中更改单元格的 alpha 实际上都会坚持下去。当然,如果你这样做,你必须重新安排你的逻辑,以便在逐个单元格的基础上完成更改,即:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell  
forRowAtIndexPath:(NSIndexPath *)indexPath {
if (cell == [self otherCell]) {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"OtherCellEnabled"]) {
cell.alpha = 1.0;
cell.userInteractionEnabled = YES;
}
else {
NSLog(@"Changing alpha to 0.3");
cell.alpha = 0.3;
cell.userInteractionEnabled = NO;
}
}
}

正如我所说,我不确定为什么它在 willDisplayCell 中有效,但在 cellForRowAtIndexPath 中无效。其他人似乎也不确定:

What is -[UITableViewDelegate willDisplayCell:forRowAtIndexPath:] for?

UITableView background with alpha color causing problem with UITableViewCell

另一个解决方案 是不使用有问题的 alpha,而是使用另一个可以达到相同效果的设置。在我的例子中,它是 contentView.alphabackgroundColor。无论出于何种原因,这些设置都会保留,您甚至可以在 viewWillAppear 中设置它们,它会按预期工作:

- (void) viewWillAppear:(BOOL)animated {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"OtherCellEnabled"]) {
[self otherCell].backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
[self otherCell].contentView.alpha = 1.0;
[self otherCell].userInteractionEnabled = YES;
}
else {
NSLog(@"Changing alpha to 0.3");
[self otherCell].backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.3];
[self otherCell].contentView.alpha = 0.3;
[self otherCell].userInteractionEnabled = NO;
}
}

第二种方法的缺点是现在您正在覆盖 Storyboard 的单元格颜色设置,但如果您关心的话,可以通过向 Storyboard 询问颜色来解决这个问题。

我不确定为什么 cell.alpha 被区别对待。也许与静态单元格的实现方式有关。

关于ios - viewWillAppear 期间的静态 UITableViewCell 更改未反射(reflect)在显示中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14498706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com