从uitableview存储nsdictionary中的数据

时间:2014-12-18 09:53:11

标签: ios objective-c uitableview nsdictionary

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

3 个答案:

答案 0 :(得分:1)

扩展我的评论:

如果我理解你,你想通过tableView和字典将UItableViewCell中的数据带回viewController。

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

使用块:

MyTableViewCell.h

@interface MyTableViewCell : UITableViewCell

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

@end

MyTableViewCell.m

像textfield 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
 }

答案 1 :(得分:0)

假设您已引用文本字段,请执行以下操作:

[yourNSMutableDictionary setObject:yourobject forKey:yourkey];

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

答案 2 :(得分:0)

我建议将其存储在- (void)textFieldDidEndEditing:(UITextField *)textField UITextField的委托方法中,而不是存储SUBMIT按钮的所有信息。

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

如果您正在使用UITextView,那么还要包含适当的代理人。

背后的原因是,

  • 您实时拥有用户信息,意味着您在表单,名字,姓氏,地址,DOB等领域中只有少数字段。当用户处于名字字段时,以及焦点时(点按即可更改)姓氏(或任何其他字段),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]];
}