从 uitableview 将数据存储在 nsdictionary 中

Posted

技术标签:

【中文标题】从 uitableview 将数据存储在 nsdictionary 中【英文标题】:store data in nsdictionary from uitableview 【发布时间】:2014-12-18 09:53:11 【问题描述】:

我有一个自定义的可编辑UITableview,我的问题是当我点击提交按钮时如何将它的值存储在NSDictionary 中。我的表格就像一个简单的注册表单。

【问题讨论】:

以及您为此编写的代码 我正在使用自定义 uitablviewcell,其中有两个文本字段(即年龄和性别)所以,我的问题是如何通过标签将这两个文本字段存储在 nsdictionary 中? [yourdict setObject:textfield.text forKey:propertyName];有那么难吗…… 如果我理解你的话,你想从 UItableViewCell 中获取数据并返回到带有 tableView 和字典的 viewController 中。有两种主要方法可以做到这一点,您可以为单元格创建委托或在单元格上创建块。因此,一旦文本文件完成编辑,就使用新数据调用委托/块。然后让vc保存它。 不,因为我使用的是 cell.textlabel.text。当点击按钮(即提交按钮)时,我将数据放在字典中。 【参考方案1】:

扩展我的评论:

如果我理解你的话,你想从 UItableViewCell 中获取数据,并使用 tableView 和字典将数据返回到 viewController。

执行此操作的主要方法有两种,您可以为单元格创建委托或在单元格上创建块。因此,一旦文本文件完成编辑,就使用新数据调用委托/块。然后让vc保存它

使用块:

MyTableViewCell.h

@interface MyTableViewCell : UITableViewCell

@property (nonatomic, copy) void (^nameChangedBlock)(NSString *name);

@end

MyTableViewCell.m

在类似文本字段 didFinishEditing 中:

 - (void)textFieldDidFinishEditing:(UITextField *)textField 

   if (textField == self.nameTextfield) 

         self.nameChangedBlock(textField.text)

    

在带有TableView的ViewController中,在数据源方法cellforRow中

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

 // Do your standard stuff create the cell and set data;
 // dequeueReusableCellWithIdentifier: blah blah

   cell.nameChangedBlock = ^
        // Alex j thank you 
        [yourNSMutableDictionary setObject:yourobject forKey:yourkey];
   ;

    return cell
 

【讨论】:

【参考方案2】:

假设您参考了您的文本字段,只需执行以下操作:

[yourNSMutableDictionary setObject:yourobject forKey:yourkey];

编辑*如果您想从您的 uitableview 点击获取信息,请查看此链接Use UITableViewCell as Button

【讨论】:

是的,我知道,但是如何通过从表中单击按钮将数据存储在 nsdictionary 中?【参考方案3】:

我建议不要在点击提交按钮时存储所有信息,而是将其存储在- (void)textFieldDidEndEditing:(UITextField *)textField,这是UITextField的委托方法。

如果您在UITextField 中显示清除按钮(十字图标),那么当用户点击清除按钮时,您必须从NSDictionary 清除特定行。为此,您也必须添加 - (BOOL)textFieldShouldClear:(UITextField *)textField

如果您使用的是UITextView,则还应包含相应的委托。

这些背后的原因是,

您拥有实时用户信息,这意味着您的表单中只有几个字段,名字、姓氏、地址、出生日期等。当用户在名字字段中时,以及当焦点时(点击更改) 对于姓氏(或任何其他字段),textFieldDidEndEditing 将被调用,您可以将名字保存到字典中。

同时,如果你显示一个清除按钮,当用户在名字字段中点击它时,textFieldShouldClear 将被调用,名字将立即从字典中删除.

如果您正在准备一份大注册表(或任何其他表格)。例如,从用户那里获取 20 个值,如果您不使用这种方法,用户信息将在表单中保持可见。因为您可以随时从字典中获取并显示特定值。


例子,

- (void)textFieldDidEndEditing:(UITextField *)textField 
    NSString *getKey = [self keyForTag:textField.tag];
    if(textField.text.length != 0) 
    [dictionary setValue:textField.text forKey:getKey]; 


- (BOOL)textFieldShouldClear:(UITextField *)textField 
   NSString *getKey = [self keyForTag:textField.tag];
   if([dictionary valueForKey:getKey]) 
   [dictionary removeValueForKey:getKey];


- (NSString *)keyForTag:(NSInteger)tag 
    if(tag == 1) 
       return @"kFirstName";
    
    else if(tag == 2) 
       return @"kLastName";
    
    ...


- (NSString *)showValueForTag:(NSInteger)tag 
    return [dictionary valueForKey:[self keyForTag:tag]];

【讨论】:

以上是关于从 uitableview 将数据存储在 nsdictionary 中的主要内容,如果未能解决你的问题,请参考以下文章

从 UITableView 中删除行会更改存储在其他行中的信息

动态填充 UITableView

Swift - 如何从 Firebase 检索多个值并将它们显示在 UITABLEVIEW

在 Swift 中存储和引用绘图数据以在 UITableView 中使用的最佳方式

从Swift中的另一个类刷新UITableView

将数据从 detailViewController 传回 UITableView