ios – 静态UITableViewCell在viewWillAppear期间更改未反映在显示中

ios – 静态UITableViewCell在viewWillAppear期间更改未反映在显示中,第1张

概述我正在使用故事板中配置的一些静态UITableViewCell来显示一些设置信息. 如果切换其他设置之一,则应禁用其他一些单元格. 为了使单元格处于正确状态,在viewWillAppear期间,我从NSUserDefaults读取设置,然后相应地更改单元格. - (void) viewWillAppear:(BOOL)animated if ([[NSUserDefaults standa 我正在使用故事板中配置的一些静态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.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.Alpha和backgroundcolor.无论出于何种原因,这些设置都会粘住,您甚至可以在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的单元格颜色设置,但如果您关心它,可以通过询问故事板的颜色来解决这个问题.

我不确定为什么cell.Alpha被区别对待.也许是关于静态单元的实现方式.

总结

以上是内存溢出为你收集整理的ios – 静态UITableViewCell在viewWillAppear期间更改未反映在显示中全部内容,希望文章能够帮你解决ios – 静态UITableViewCell在viewWillAppear期间更改未反映在显示中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1053902.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存