我专门管理的tableView出现问题,我确实需要经常删除和添加行。我的单元是通过程序设计的。我更新了依赖我的单元格并称为self.tableView.reloadData()
的数组,但这不会删除我需要的单元格并像我的数组一样更新tableView ...
由于单元的重用和我的设计(以编程方式),我需要检查,是否总是设计单元。问题出在这里。
当我调用tableView.reloadData()
时,我的数据没有正确地重新加载,因此我需要删除单元格中的所有视图:表明这些单元格不是设计的,而是要设计新的单元格...当然,我可以(使用tableView.visibleCells
更新可见的单元格,因此可以正常工作,但如何更新其他不可见的单元格?
也许我有体系结构问题?如果是:
在定义了indexPath的TableView中删除和插入行的最佳方法是什么?或者,如何仅一次以编程方式设计单元?
如果需要显示代码,请在注释中询问我,但是它很长。
感谢您的回复
代码:
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
}
答案 0 :(得分:0)
您可以拥有一个表的数组:
NSMutableArray *model;
(模型可以具有标识符)。
您可以随时更改此模型。
这样,您可以使表动态化,只需调用tableView.reloadData()
并在cellForRow
和heightForRow
中进行任何操作
- (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];
}
希望这对您有所帮助。