如何保存在UITableViewCell中包含的UITextField中输入的文本?

时间:2015-04-14 07:22:02

标签: ios objective-c iphone uitableview tableviewcell

在我的应用程序中,我动态创建一个包含2个控件的表格视图单元格,其中一个是UILabel,用于显示我从Web服务接收的标题,另一个是UITextField。此UITextField将接受用户输入。

现在所有的字段名称和字段类型都是从Web服务接收的,所以我不知道每次都会出现哪个字段?

那么,当用户在字段中输入相应的值时,如何保存它们并识别它们属于哪个标题?

我尝试了this选项,但它仅适用于静态UITableView(他们已经知道哪些字段属于值)

我将获得一系列字段,如“身高”,“血压”等。 我的用户界面是这样的

enter image description here

和我的代码部分

.m file is 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;    //count of section
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [fieldName count]; //dynamic field name array count

}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"cell";

    cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil)
    {
        cell = [[testCell alloc] initWithStyle:UITableViewCellStyleDefault
                                             reuseIdentifier:MyIdentifier];
    }

    NSString *uppercaseString = [[fieldName objectAtIndex:indexPath.row] uppercaseString];
    cell.title.text=uppercaseString;//filed name

    return cell;
}

从这个我如何得到输入文本值并保存它???

4 个答案:

答案 0 :(得分:0)

我建议您使用专为动态tableview设计的FXForms。它使用键值编码模式保存和获取表单模型数据。

答案 1 :(得分:0)

如果从表单字段中获取值并存储它们是您的问题,请尝试此方法。我仍然不确定你究竟在寻找什么。

将表单字段对象添加到NSMutableArray。单击完成按钮后,遍历数组并获取相应的字段对象,用户从中输入值。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;    //count of section
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

return [fieldName count]; //dynamic field name array count

}

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"cell";

     if (!self.fieldsArray) {
        self.fieldsArray = [[NSMutableArray alloc]init];
     }       

    cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil)
    {
        cell = [[CustomCell alloc]init]
    }

    NSString *uppercaseString = [[fieldName objectAtIndex:indexPath.row] uppercaseString];

    cell.titleLabel.text=uppercaseString;//filed name


     UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 30, 250, 250)];
     [cell.contentView addSubview:textField];
     [self.fieldsArray addObject:textField];    

    }

    return cell;
}

//Button Click
-(IBAction)doneSelection:(id)sender{
    for (id *field in _testArray) {
        if ([field isKindOfClass:[UITextField class]]) {
             NSString* userEnteredValue = field.text;
        }else if ([field isKindOfClass:[UISlider class]]){
           //Handle for other types
        }
    }
 }

答案 2 :(得分:0)

您可以使用相同的值标记每个标签和文本字段,假设row1将具有标记值1,而row2将具有标记值和文本字段将具有标记值2,因此您可以轻松识别该对并获取文本。像这样修改你的方法

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

if (cell == nil)
{
    cell = [[testCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
}
UILabel *lblTilte=[[UILabel alloc]init];
[lblTilte setFrame:<#(CGRect)#>];//set your own frame
NSString *uppercaseString = [[fieldName objectAtIndex:indexPath.row] uppercaseString];
[lblTilte setText:uppercaseString];//your title received from web service
lblTilte.tag=indexPath.row;//identify pair
[cell.contentView addSubview:lblTilte];

UITextField *inputTextField=[[UITextField alloc]init];
[inputTextField setFrame:<#(CGRect)#>];//set your own frame
inputTextField.tag=indexPath.row;//identify pair
[cell.contentView addSubview:inputTextField];
return cell;}

现在,当您收到输入时,请将其与标记匹配。您可以在文本字段委托方法中获取输入值,文本字段确实结束编辑,或者如果您有单元格选择方法,也可以检索值。

答案 3 :(得分:-2)

要在本地保存数据,您可以使用.Plist(属性列表)。

NSMutableArray方法中创建UITableView并重新加载viewWillAppear

.Plist是存储数据或保存数据的最佳方式。 要么 您也可以使用核心数据。

或者,如果您的数据量非常少,则可以使用NSUserDefaults。