【问题标题】:Wrong tag returned of UITextfield inside UITableviewcell After Row Deletion行删除后 UITableviewcell 内的 UITextfield 返回错误标记
【发布时间】:2013-03-11 23:18:08
【问题描述】:

我在每个单元格中都有一个 UITextfield,我为其分配了一个等于当前行号的标签。

cell.textfield.tag = indexPath.row;

当用户结束编辑文本字段时,我需要 indexpath.row

-(void) textFieldDidEndEditing:(UITextField *)textField{

CustomCell *cell = (CustomCell *) [[textField superview]superview];

if([cell isKindOfClass:[UITableViewCell class]]){

    //NSIndexPath *indexPath = [Table indexPathForCell:cell];

    int row = textField.tag;
    NSLog(@"indexpath: %d",row);

NSString *str = [datasource objectAtIndex:row]; //get exception here
.............. }

我在这里面临的问题是,当我使用deleteRowsAtIndexPaths 删除一行,然后结束编辑最后一个单元格时,我得到错误的标签号,因为数据源不包含该索引处的元素。此外,我不能使用indexPathForCell:,因为如果正在编辑文本字段的单元格超出屏幕,它将返回 null。

我该怎么做才能获得正确的标签号?我不想重新加载表格,因为它没有任何动画。什么可以替代?欢迎任何建议。谢谢。

【问题讨论】:

  • 您是否正在删除此标签[tableView BeginUpdates][tableView endUpdates] 中的行?
  • 是的,我在这些标签内做。
  • 不要使用 indexPath.row 来分配标签,你可以定义你的值..
  • 如果我将自己的值分配给标签,当我删除一行时它们将如何更改?
  • 我需要一个正确的值来访问正确的数组索引,即使单元格不可见。

标签: ios uitableview tags uitextfield


【解决方案1】:

使用免费的 Sensible TableView 框架来管理所有这些文本字段可能会容易得多。该框架只是根据您的类属性创建它们,并自动将输入的值写回您的类。在我看来,iOS 表单真的很容易使用和直接。

【讨论】:

  • 感谢您的建议。但在这个阶段我无法使用这个控件。我会记住它以备将来使用。谢谢:)
【解决方案2】:

不要使用 indexPath.row 来定义您的值,如下所示

我已经根据假设编写了下面的代码,我不知道您的数据源可能会有所不同..

for(int i=0;i<10;i++){
     Data *obj=[[Data alloc] init];
     obj.tag=i;//
     obj.value=@"your value";

     [dataSource addObject:obj];
}

Data *obj=[dataSource objectAtIndex:indexPath.row];
cell.textfield.tag = obj.tag;

当你将获取标签时

-(void) textFieldDidEndEditing:(UITextField *)textField{

    CustomCell *cell = (CustomCell *) [[textField superview]superview];

    if([cell isKindOfClass:[UITableViewCell class]]){

        //NSIndexPath *indexPath = [Table indexPathForCell:cell];

        int row = textField.tag;
        NSLog(@"indexpath: %d",row);

        Data *obj;
        for(Data *data in dataSource){
            if(data.tag == row){
                obj=data;break;
            }

        }

        NSString *str = obj.value;
    }

【讨论】:

  • 感谢您的回答。得到结果后我会告诉你的。
  • 如果我删除一行,我的数据源就会更新。我将如何根据它管理标签号?
猜你喜欢
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 2020-02-17
相关资源
最近更新 更多