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

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

【问题讨论】:

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

标签: ios objective-c uitableview nsdictionary


【解决方案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]];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多