从 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 中删除行会更改存储在其他行中的信息
Swift - 如何从 Firebase 检索多个值并将它们显示在 UITABLEVIEW