json数据填充和多选以获取ID

Posted

技术标签:

【中文标题】json数据填充和多选以获取ID【英文标题】:json data populate and multiselection to get Ids 【发布时间】:2016-11-16 07:04:53 【问题描述】:

我必须发布一个 JSON 并作为响应获取用户 ID 和更多的东西。我已将它添加到一个数组并填充我的 tableview。像这样。

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

    ModelClass * model = __arrayForContacts[indexPath.row];

  MYcustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

现在,我已将多选应用到我的 tableview。我想从多选行中获取用户 ID。我希望它在下一个 JSON 解析中作为请求发布。我该如何实现这一点,任何帮助都是谢谢。

【问题讨论】:

你是否在 ModelClass 中声明了多选属性? 你能解释一下为什么需要它吗? 检查我的答案。您需要在名为 isSelected 的模型类中声明 bool 属性以跟踪您的选择。 你声明了 isSelected 属性吗? 【参考方案1】:

tableview的didselect方法需要如下设置

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    yourobjectClass *objCookBook = [arrCookBook objectAtIndex:indexPath.row];
    objCookBook.isSelected = !objCookBook.isSelected;
    //[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    //[tableView deselectRowAtIndexPath:indexPath animated:YES];// uncomment above line if you want to reload table

你可以得到如下:

// isSelected 是你的选择标志

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isSelected == 1"];
      NSArray *arrSelected = [arrCookBook filteredArrayUsingPredicate:predicate];
     if (arrSelected.count > 0) 
       NSlog(@"%@",[arrSelected valueForKey:@"userId"]); // replace your id name and post it to json 

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[arrSelected valueForKey:@"userId"] options:NSJSONWritingPrettyPrinted error:nil];
    NSString *JsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];
    

【讨论】:

为什么要跟踪选择。当 indexPathsForSelectedRows 提供所有被选择的行时。 因为如果我们想在末尾发布 json 是一种简单的方法。如果你想使用 indexPathsForSelectedRows 那么你需要在最后做更多的工作。 @MuhammadZohaibEhsan 你能通过 indexPathForSelectedRows 解释一下吗?我正在做和介于两者之间。 我想说两者都需要工作。所以最好使用已经实现的东西。 :)【参考方案2】:

如果你想应用自定义多选,那么试试这个,它永远不会失败。 请按照以下步骤操作:-

    使用循环在数组的每个字典中添加新值 当你得到回应。像这样

对于 0 中的 j ..

    cellForRowAtIndexPath 中应用条件

让 dictList = arrList.objectAtIndex(indexPath.row) as! NSMutableDictionary let val = dictList.objectForKey("attribute_option_list") as!细绳 如果 val == "0" “取消选中” 别的 “查看”

    还应用 didSelectRowAtIndexPath 中的条件,更改特定索引字典中 val 键的值

让 dictList = arrList.objectAtIndex(indexPath.row) as! NSMutableDictionary 让 val = dictList.objectForKey("attribute_option_list") 作为!细绳 如果 val == "0" dictList.setObject("1", forKey: "val") 别的 dictList.setObject("0", forKey: "val") arrList.replaceObjectAtIndex(indexPath.row, withObject: dictList) tblView.reloadData()

不要忘记重新加载表并使用正确的条件检查取消选中和键的值

也可以将选中的数据以json格式返回给服务器

【讨论】:

以上是关于json数据填充和多选以获取ID的主要内容,如果未能解决你的问题,请参考以下文章

组合框多选以在 Access 2016 中的文本框中显示所选项目

使用 v-for 在 vue 中填充多选菜单和选项

动态生成级联下拉框和多选框

vant实现select效果,单选和多选

通过 /id json-server 删除 div

表视图单选和多选的实现