从TableCell修改NSMutableArray

时间:2014-10-03 01:56:40

标签: ios objective-c nsmutablearray tableview textfield

我有一个TableView(名为myTableView),其中包含一个ViewController内的原型单元格(名为:TableCell) (不是TableViewController,名为:ViewController)。

每个单元格有4个不同的文本字段,显示来自不同NSMutableArrays的数据(在ViewController.h中声明并命名为:Legajos,Nombres,Cbus,Sueldos,Contribuciones),因此例如第0行的单元格将显示索引0处的对象来自Legajos,Nombres等...所有这些都有效,我甚至可以毫无问题地添加和删除行。

现在我的问题。我有文本字段(声明为TableCell.h),它显示来自NSMutableArrays的文本(在ViewController.h中声明),但我只能使它成为“单程旅行”,也就是说,文本字段只显示来自NSMutableArrays的文本但是我还需要它们来修改NSMutableArray,这样我就可以保存那个数组,然后加载它。

NSMutableArrays声明:(ViewController.h)

@property (strong, nonatomic) NSMutableArray *Legajos;
@property (strong, nonatomic) NSMutableArray *Nombres;
@property (strong, nonatomic) NSMutableArray *Cbus;
@property (strong, nonatomic) NSMutableArray *Sueldos;
@property (strong, nonatomic) NSMutableArray *Contribuciones;

以下是单元格如何获取文本:(ViewController.m)

cell.legajo.text = [Legajos objectAtIndex:indexPath.row];
cell.nombre.text = [Nombres objectAtIndex:indexPath.row];
cell.cbu.text = [Cbus objectAtIndex:indexPath.row];
cell.sueldo.text = [Sueldos objectAtIndex:indexPath.row];
cell.contribucion.text = [Contribuciones objectAtIndex:indexPath.row];

这是细胞的IBOutlets :( TableCells.h)

@property (strong, nonatomic) IBOutlet UILabel *legajo;
@property (strong, nonatomic) IBOutlet UITextField *nombre;
@property (strong, nonatomic) IBOutlet UITextField *cbu;
@property (strong, nonatomic) IBOutlet UITextField *sueldo;
@property (strong, nonatomic) IBOutlet UITextField *contribucion;

很抱歉,如果它很难理解。感谢您给予的任何帮助。

1 个答案:

答案 0 :(得分:0)

Easieast方式可能是将(void) textFieldDidEndEditing:(UITextField *)textField方法添加到您的UITextField委托。您可以在创建时为每个UITextField分配一个标记,这样您就可以知道要编辑的数组,或者我相信NSIndexPath *indexPath = [self.tableView indexPathForCell:(CustomCell*)[[textField superview] superview]];可能会做到这一点。

 (void) textFieldDidEndEditing:(UITextField *)textField {
        NSIndexPath *indexPath = [self.tableView indexPathForCell:(CustomCell*)[[textField superview] superview]]; 

        switch(indexPath.section) 
    {
        case '0':
            // edit object in first array at index indexPath.row
            [firstArray replaceObjectAtIndex:indexPath.row withObject:textField.text];
            break;
        case '1':
            // edit object in second array at index indexPath.row
            [secondArray replaceObjectAtIndex:indexPath.row withObject:textField.text];
            break;
        case '2':
            // edit object in third array at index indexPath.row
            [thirdArray replaceObjectAtIndex:indexPath.row withObject:textField.text];
            break;
        case '3':
            // edit object in fourth array at index indexPath.row
            [fourthArray replaceObjectAtIndex:indexPath.row withObject:textField.text];
            break;
        case '0':
            // edit object in fifth array at index indexPath.row
            [fifthArray replaceObjectAtIndex:indexPath.row withObject:textField.text];
            break;
        default :
            }

    }

这是我输入的一个简单示例。