如何将UITextField的值转换为UITableViewCell中的NSString?

时间:2018-04-27 06:29:39

标签: ios objective-c uitableview uitextfield nsstring

我将UITextField设置为UITableViewCell。根据数组计数加载UITableView。所有文本字段都是可编辑的。但是,我想要,当我编辑UITextField时,UITextField数据应该存储到预定义的NSString中。对于每个IndexPath.row,textfield是不同的字符串。

附加我用于生成NSMutableArray ...

的代码
[arrProfile removeAllObjects];
 arrProfile = [[NSMutableArray alloc] initWithObjects:
              @{@"title": @"CUSTOMER NAME", @"details": strFName},
              @{@"title": @"EMAIL ID", @"details": strEmail},
              @{@"title": @"MOBILE NO.", @"details": strContact},
              @{@"title": @"STATE", @"details": strStateName},
              @{@"title": @"CITY", @"details": @""},
              nil];

[_tblProfile reloadData];

现在附上cellForRowAtIndexPath ...

中使用的代码
static NSString *cellIdentifier = @"cellProfile";

NSDictionary *dictProfile = [arrProfile objectAtIndex:indexPath.row];
ProfileTableViewCell *cell = (ProfileTableViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

cell.lblTitle.text = [dictProfile objectForKey:@"title"];
cell.txtDetails.text = [dictProfile objectForKey:@"details"];

cell.txtDetails.delegate = self;
[self textFieldShouldReturn:cell.txtDetails];
[self textFieldShouldBeginEditing:cell.txtDetails];

return cell;

4 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您需要构建一个动态表单,其中许多文本字段将根据您提供的数组而有所不同。您正试图通过获取表视图并按每行加载所有文本字段来实现此目的。现在问题出现了如何获取在每个文本字段中输入的值。如果这是你的问题,那么该怎么做呢。

您可以使用标记为文本字段来执行此操作。您听到它正确!在tableview单元格方法中为每个文本字段赋予唯一标记(您可以使用indexpath.row)。在这里分配代表。将触发Textfield委托方法。现在从textfield委托方法再次基于标记获取文本字段中的输入作为字符串和存储。

注意:

[self textFieldShouldReturn:cell.txtDetails];
[self textFieldShouldBeginEditing:cell.txtDetails];

不需要从tableview cellForRowAtIndexPath调用的方法。如果您指定了Textfield委托,它将负责处理。

答案 1 :(得分:0)

选项1:

这适合您的实施 在创建单元格行(peer chaincode invoke -n mycc -c '{"Args":["set", "a", "20"]}' -C myc )时将单元格索引分配给txtDetails.tag。 这有助于您识别文本字段行

cellForRowAtIndexPath

实施UITextField委托txtDetails.tag = indexPath.row textFieldDidEndEditing

  1. 获取字段值。
  2. 行索引

    arrProfile [textField.tag] =“新值”

  3. 选项2:

    定义协议以获取单元格文本更新

    shouldChangeCharactersIn

    在你的cellForRowAtIndexPath中执行以下操作

    protocol  MYCellDelegate: class {
        textFieldDidChange(row: Int, string: String)
    }
    
    class MyCell: UITableViewCell {
        weak var delegate:  MYCellDelegate?
        var row: Int
    }
    

    在单元格(cell.delegate = self cell.row = indexPath.row textFieldDidEndEditing)中实施UITextFieldDelegate

    并使用适当的值

    调用shouldChangeCharactersIn

    不要忘记从textFieldDidChange(row: Int, string: String)

    中删除以下行
    cellForRowAtIndexPath

答案 2 :(得分:0)

cell.txtDetails.delegate = self;
cell.txtDetails.tag = indexPath.row;
[cell.txtDetails addTarget:self action:@selector(textFieldDidEndEditing:) forControlEvents:UIControlEventTouchUpInside];



-(void)textFieldDidEndEditing:(UITextField *)textField {
if (textField.tag == 0) {
    strFName = textField.text;
} else if (textField.tag == 2) {
    strContact = textField.text;
}

[self loadTheMainArray];

}

答案 3 :(得分:0)

1.您可以尝试使用块函数添加到单元格,但现在遵循代码块:

cell.m_textChangeBlock = ^(NSString *text) {
    if(indexPath.row){
        weakSelf.m_models[indexPath.section].rtext = text;
    }else{
        weakSelf.m_models[indexPath.section].ltext = text;
    }
};