我在每个单元格中都有一个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。如何获得正确的标签号?我不想重新加载表格,因为它没有任何动画。有什么可以替代的?任何建议都欢迎。谢谢。
最佳答案
不要使用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;
}
关于ios - 行删除后,UITableviewcell中的UITextfield返回的标签错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15564604/