gpt4 book ai didi

ios - 删除行后 UITableview 重新加载数据

转载 作者:行者123 更新时间:2023-11-28 21:45:57 27 4
gpt4 key购买 nike

我有一个 UITableview,其中包含从后端获取的“类(class)”数据。用户可以使用单元格上的 2 个 ui 按钮接受或拒绝类(class)。

问题是如果用户拒绝多节课,按钮似乎没有更新并拒绝错误的课。

这是我添加 uibutton 的方法:

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"userWaitingCell" forIndexPath:indexPath];

UIButton *acceptBtn = (UIButton *)[cell viewWithTag:200];
acceptBtn.tag = [[dic objectForKey:@"id"] integerValue] + 10000;
[acceptBtn addTarget:self action:@selector(acceptLesson:) forControlEvents:UIControlEventTouchUpInside];

UIButton *refuseBtn = (UIButton *)[cell viewWithTag:201];
refuseBtn.tag = [[dic objectForKey:@"id"] integerValue] + 10000;
[refuseBtn addTarget:self action:@selector(refuseLesson:) forControlEvents:UIControlEventTouchUpInside];

NSLog(@"Btn TAG: %ld", (long)refuseBtn.tag);

return cell;

我用后端数据库中类(class)的唯一 ID 设置标签。

这是我处理用户点击按钮的方式:

- (void)refuseLesson:(id)sender
{
UIButton *senderBtn = (UIButton *)sender;
NSString *tmpUrl = [NSString stringWithFormat:@"%@%ld",
@"lesson/refuse/", senderBtn.tag - 10000];
NSLog(@"tmpUrL : %@", tmpUrl);
[dbService sendPostRequest:tmpUrl];
}

我可以在 NSLog 中看到这是错误的类(class) ID。

当我完成请求时,我将像这样设置我的数据数组:

    for (int i = 0; i < [lessonList count]; i++)
{
NSMutableDictionary *lesson = [lessonList objectAtIndex:i];
if ([[lesson objectForKey:@"id"] integerValue] == [[dataDic objectForKey:@"id"] integerValue])
{
if ([[dataDic objectForKey:@"invitationStatus"] isEqualToString:@"accepted"])
{
[lesson setObject:@"accepted" forKey:@"invitationStatus"];
[lesson setObject:[dataDic objectForKey:@"lesson_count"] forKey:@"lesson_count"];
[lesson setObject:[dataDic objectForKey:@"lesson_done"] forKey:@"lesson_done"];
}
else if ([[dataDic objectForKey:@"invitationStatus"] isEqualToString:@"refused"])
{
[lesson setObject:@"refused" forKey:@"invitationStatus"];
[lessonList removeObjectAtIndex:i];
}
[self.myTableView reloadData];
NSLog(@"RELOADING");
return ;
}
}

最佳答案

您似乎是通过在 Storyboard 中设置的标签获取按钮:200 和 201。

然后在您的代码中将按钮的标签更改为新值:

`[[dic objectForKey:@"id"] integerValue] + 10000`

此时您已经更改了单元格中这些按钮的标签。

在下一个 [self myTableView reloadData]; 调用中,单元格将被重用而不是创建。这些单元格中没有一个具有有效标记 200 或 201 的 View 。

按钮将具有您第一次添加的原始操作。

最快的解决方案:

1) CTLR 在 IB 中将您的按钮拖到单元格标题中,并为每个按钮创建一个 IBOutlet:acceptButtoncancelButton 说。这使您的代码能够直接在代码中引用按钮。不要使用标签 200 和 201,因为它们不再需要。

2) 在您的单元格创建代码中,通过标记 200 和 201 删除提取并直接引用它们。像这样的东西:

 UIButton *acceptBtn = cell.acceptButton;
acceptBtn.tag = [[dic objectForKey:@"id"] integerValue] + 10000;

UIButton *refuseBtn = cell.refuseButton;
refuseBtn.tag = [[dic objectForKey:@"id"] integerValue] + 10000;

NSLog(@"Btn TAG: %ld", (long)refuseBtn.tag);
return cell;

3) CTRL - 将您的按钮原型(prototype)拖到您的 TableView 标题中,并为每个按钮添加一个 IBAction。因此,请使用您现在拥有的相同代码来执行操作。

这将阻止发生标签冲突,我很确定这是您的问题。

关于ios - 删除行后 UITableview 重新加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152208/

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