gpt4 book ai didi

ios - 从 UITableView 中删除行时删除 UITextField 内容

转载 作者:行者123 更新时间:2023-11-29 03:25:58 25 4
gpt4 key购买 nike

我的应用程序中有一个表格 View ,它有 6 行,玩家一到玩家六。用户输入球员姓名并可以通过滑动并点击“删除”来删除行 当行的文本字段中有文本时,我遇到了问题。例如,我在前 3 行的文本字段中填写了“一”到“三”。如果您删除第 3 行的“三”,它会删除该行,但文本字段中的文本“三”将进入玩家四下方的行。解决此问题的最佳方法是什么?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"playerCell";
playerCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];

cell.playerLabel.text = [[_playerNames objectAtIndex:indexPath.row]objectForKey:@"title"];
NSString *test = [NSString stringWithFormat:@"%@", cell.playerNameBox.text];
cell.playerNameBox.tag = indexPath.row;

NSString *key = [NSString stringWithFormat:@"%ld", (long)indexPath.row];
[[NSUserDefaults standardUserDefaults]
setObject:test forKey:key];

return cell;
}

删除一行:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[_playerNames removeObjectAtIndex:indexPath.row];
[Table reloadData];

}
}

部分中的行数 = 6

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return _playerNames.count;
}

最佳答案

在您的“cellForRowAtIndexPath”方法中,您没有正确检查 nil 对象情况。

代替:

cell.playerLabel.text = [[_playerNames objectAtIndex:indexPath.row]objectForKey:@"title"];

做:

NSString *title = [[_playerNames objectAtInex:indexPath.row] objectForKey:@"title];
cell.playerLabel.text = (title ? title : @""); // set the label to either title or the empty string

我怀疑发生的事情是您在重新加载或重复使用时没有正确重置文本标签。

但不管怎样,与其重新加载数据,不如删除标记为删除的行。

即:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[_playerNames removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths: [NSArray arrayWithObject: indexPath] withRowAnimation: UITableViewRowAnimationLeft];
}
}

另一个仅供引用:

我注意到你有:

    [Table reloadData];

在您的代码中。 Objective-C 的最佳做法是用大写字母命名您的实例变量。它应该是更具描述性的内容,例如“itemTable”。

关于ios - 从 UITableView 中删除行时删除 UITextField 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20462403/

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