我目前仍然坚持如何最好地查找并传递点击的表格视图行的ID。我想知道实现这一目标的最佳做法是什么。
tableview
。现在来了我的问题:如果我没有显示唯一ID,如何根据点击的哪一行再次找到此ID?有没有办法分配隐藏的字段?我希望通过POST 将唯一ID发送回网络服务器。
到目前为止,我一直在调查的方向是......
NSDictionary
,并将点击的tableview行匹配回来获取ID。从单击的tableview行获取相应的ID方面,您认为最好的是什么?
非常感谢你的时间。
答案 0 :(得分:1)
我最简单实现此目的的方法是将您获得的对象存储到本地数组(或任何具有顺序并匹配表的显示顺序的内容)。从那里,您可以使用所选表格单元格的索引来确定选择了哪个对象并获取ID。
因此,如果您的Web服务中填充了一组sampleObject(每个名称,地址和ID)。使用此数组作为表的数据源。使用tableView:didSelectRowAtIndexPath:委托方法,如下所示......
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
int rowSelected = indexPath.row;
id sampleObject = tableDataSource[rowSelected]; // Assuming tableDataSource is an array you created to populate the table
// ...do whatever with the object that the user selected
}
答案 1 :(得分:1)
通常,您有一组模型对象,用于确定要向用户显示的UI元素数量。在简单的情况下,这可能只是NSArray
,但也可以从Core Data或远程后端获取。
当表要求单元格时,使用indexPath
在后备集合中查找相应的模型对象。然后,您可以使用对象中的信息来配置单元格。
当用户选择一行时,您可以使用报告的indexPath
进行类似的查找。获得正确的对象后,您可以查找其ID并执行必要的网络请求。
答案 2 :(得分:1)
让我们分步进行。
夫特
resonseObject.objectAtIndex(indexPath.row).valueForKey(id)
目标-C
[[responseObject objectAtIndex:indexPath.row] valueForKey:@"id"]
您还可以创建自定义UITableViewCell类并将ID作为String属性并将其设置在cellForRowForIndexPath中,但我认为第一种解决方案更好。
问候。
答案 3 :(得分:1)
这就是你如何完成这个
调用您的网络服务并获取json。解析json并继续向NSMutableArray添加对象说itemList。
创建一个模型类,说Itemdesc,它有3个字段的名称,地址和ID。
解析json时,将每个单独的产品解析为上面定义的项目模型对象,并将其添加到itemList数组中。
可能是这样的:
NSArray *responseArray = responsefromService;
For(int i=0;i<responseArray.count;i++)
{
//Parse your object here
NSDictionary *currentItem = [responseArray objectAtIndex:i];
Itemdesc *itemObject = [[Itemdesc alloc] init];
itemObject.name = [currentItem objectForKey:@"name"];
itemObject.address = [currentItem objectForKey:@"address"];
itemObject.ID = [currentItem objectForKey:@"ID"];
[itemList addObject:itemObject];
itemObject=nil;
}
现在将此数组作为对象传递给tableView以进行行计数,并在cellForRowAtIndexPath中获取您的行对象,如下所示:
Itemdesc *currentIndexObj = [itemList objectAtIndex:indexpath.row];
cell.name.text = currentIndexObj.name;
cell.address.text = currentIndexObj.address;
这将在tableViewCell中显示您的姓名和地址。
要在选择行时获取ID,请在didSelectRowAtIndexPath中编写以下代码:
Itemdesc *currentIndexObj = [itemList objectAtIndex:indexpath.row];
NSString *ID = currentIndexObj.ID;
NSLog(@"ID value: %@", ID);
您已获得身份证,执行您想要执行的任何操作。
模型类只不过是一个普通的类本身。 用于创建模型类的代码: 转到文件 - &gt;新 - &gt;文件 - &gt; iOS-&gt;来源 - &gt; CocoaTouch类
选择next并给Class命名ItemDesc并使其成为NSObject的子类。在您的项目中,您将获得文件Itemdesc.h和Itemdesc.m
Itemdesc.h文件:
#import <Foundation/Foundation.h>
@interface Itemdesc : NSObject
@property(nonatomic,strong) NSString *name;
@property(nonatomic,strong) NSString *address;
@property(nonatomic,strong) NSString *itemID;
@end
无需在.m文件中进行任何更改。 而已。在您的类中导入表头,其中tableView存在且事情将起作用。
Json结构:
[
{
"name" : "John",
"address" : "ny",
"ID" : "xyz"
},
{
"name" : "Jane",
"address" : "dc",
"ID" : "pqr"
}
]