gpt4 book ai didi

ios - 以编程方式通过单元格设计重用错误 tableView

转载 作者:行者123 更新时间:2023-11-30 11:03:04 26 4
gpt4 key购买 nike

我的 tableView 有问题,我专门管理它,我需要经常删除和添加行。我的单元格是通过编程设计的。我更新了依赖于我的单元格的数组并调用了 self.tableView.reloadData() ,但这不会删除我需要的单元格并像我的数组一样更新 tableView 。

由于单元的重用和我的设计(以编程方式),我需要检查单元是否始终是设计的。而问题就是从这里来的。

当我调用tableView.reloadData()时,我的数据未正确重新加载,因此我需要删除单元格中的所有 View :表明单元格未设计,以设计新单元格。 ..当然,我可以只更新可见单元格(使用tableView.visibleCells),所以这项工作有效,但是我如何更新其他不可见单元格?

也许我有架构问题?如果是这样,在 TableView 中删除和插入定义了 indexPath 的行的最佳方法是什么?或者,如何以编程方式仅设计一次单元格?

代码:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return user.lobbySurvey.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:"Celll") as! CardCell
for survey in user.lobbySurvey{
let index = user.lobbySurvey.index(where: {
//get the current index is nedeed else the cells reuse lazy
$0 === survey
})
if indexPath.row == index{
var surveyState : UserSurvey.state
surveyState = survey.state
switch surveyState{
case .selectSurvey:
cell.drawCard(statutOfCard: .selectSurvey)
case .goSurvey:
cell.drawCard(statutOfCard: .goSurvey(picture: survey.picture))
case .surveyEnded:
print("survey Ended")
case .surveyWork:
print("survey in progress to vote")
case .surveyWaiting:
cell.drawCard(statutOfCard: .surveyWaiting(selfSurveyId: survey.id, timeLeft: survey.timeLeft, picture: survey.picture))
case .buyStack:
cell.drawCard(statutOfCard: .buyStack(supView : self.view))
}
}
}

cell.delegate = self
cell.delegateCard = self
cell.layer.backgroundColor = UIColor.clear.cgColor
cell.backgroundColor = .clear
tableView.backgroundColor = .clear
tableView.layer.backgroundColor = UIColor.clear.cgColor
return cell
}

最佳答案

您可以有一个数组作为表的模型:

NSMutableArray *model;(模型可以有标识符)。

您可以随时更改此模型。

有了这个,您只需调用 tableView.reloadData() 即可使表格动态化,并在 cellForRowheightForRow 中进行任何操作

- (CGFloat) tableView: (UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat height;
YourModel *model = self.model[indexPath.row];

if ([model isKindOfClass:[SomeClassTableViewCellModel class]]) {
height = 50;
} else if([model.identifier isEqualToString:@"Whatever"]){
height = 0.0f;
else{
height = kHeightForNormalCells;
}
return height;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
YourModel *model = self.model[indexPath.row];
cell = [tableView dequeueReusableCellWithIdentifier:model.identifier forIndexPath:indexPath];
if ([cell isKindOfClass:[SomeClass class]]) {
NSLog(@"Configure Cell");
[cell setModel:model];
}
return cell;
}

此外,您的单元格应该有一个 setModel 方法:

- (void)setModel:(SomeTableViewCellModel *)model {
_model = model;
self.label1.text = [NSString stringWithFormat:@"%@",model.value1];
self.label2.text = [NSString stringWithFormat:@"%@",model.value2];
}

希望这对您有帮助。

关于ios - 以编程方式通过单元格设计重用错误 tableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53060999/

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