我在每个单元格中都有一个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。
如何获得正确的标签号码?我不想重新加载表,因为它没有任何动画。什么可以替代?任何建议都是受欢迎的。感谢。
答案 0 :(得分:0)
请勿使用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;
}
答案 1 :(得分:0)
使用免费的Sensible TableView框架来管理所有这些文本字段可能要容易得多。框架只是根据您的类属性创建它们,并自动将输入的值写回到类中。在我看来,iOS表单真的很容易使用和直接。