gpt4 book ai didi

UITableView 中的 iOS 13 UISegmentedControl 缓存先前的选择

转载 作者:行者123 更新时间:2023-11-28 23:27:26 34 4
gpt4 key购买 nike

我有一个带有 UITableView 的屏幕,每个可用数据元素显示一行,数据元素的数量可以是数百个。根据数据元素类型,每行显示一个输入字段或分段控件。 iOS 13 中的分段控件存在问题,当用户点击 View 顶部分段控制行的第一段或第二段并向下滚动时,它会自动为后续 ScrollView 中的某些随机分段控制行选择第一段/页。看起来好像控件状态没有刷新。

这里是 cellForRowAtIndexPath 函数的代码片段,它创建了 UISegmentedControl 行。

QuestionOnTopTableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:@"YesNoInputIdentifier"];
if (!cell) {
cell = [[QuestionOnTopTableViewCell alloc] initWithCellStyle:QuestionCellStyleYesNo reuseIdentifier:@"YesNoInputIdentifier"];
}
cell.titleLabel.text = row.title;
cell.segmentControl.selectedSegmentIndex = row.answer ? row.answer.boolValue : UISegmentedControlNoSegment;

有人遇到过这个问题吗?

注意:此问题仅发生在 iOS13 上。

最佳答案

系统将只分配足够的单元格以供视觉显示,然后当一个单元格滚动离开时,它会重新使用它用于滚动进来的新单元格。因此 - 当这种情况发生时,它会记住您之前看到的选择。

不确定为什么在 iOS 13 之前没有发生这种情况(如果您正在查看正确的 ,您的 cellForRowAt: 函数看起来确实应该设置正确的值> 变量,但您应该能够通过覆盖 UITableViewCellprepareForReuse() 方法来重置它。

swift

class QuestionOnTopTableViewCell: UITableViewCell {

// stuffs

override func prepareForReuse() {
super.prepareForReuse()
self.segmentControl.selectedSegmentIndex = .noSegment
}
}

objective-C

这应该适合你:

-(void)prepareForReuse{
[super prepareForReuse];
self.segmentControl.selectedSegmentIndex = UISegmentedControlNoSegment;
}

编辑:

我确实看到了另一个问题,声称在 iOS13/Xcode 11 版本上设置了一个值后,.noSegment 不再起作用:UISegmentedControl.noSegment stopped working with Xcode 11, iOS 13

不幸的是,您可能需要做的是每次都重新创建分段控件的本地版本并覆盖该控件:cell.segmentControl = myNewJustCreatedSegmentControl

你也许仍然可以在 prepareForReuse 方法中这样做

关于UITableView 中的 iOS 13 UISegmentedControl 缓存先前的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58189408/

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