我正在制作一个有趣的应用程序,并想知道如何在应用程序上实现结帐/购物篮系统。
基本上,产品列表以XML文件的形式从Web服务器中提取,然后显示在UITableView控制器中。点击单元格可以让用户更详细地了解产品。
应用程序需要能够将产品变成篮子类型的东西,这就是我遇到的问题。
我可以查看一些代码示例吗?
答案 0 :(得分:0)
如果您为数据选择适当的格式,则此任务很简单。 ObjC中最自然的XML represantation是NSDictionaries / NSArrays树。在最简单的情况下,你有NSArray的项目(你在tableview中显示的那些),每个都是NSDictionary,其中包含“ItemName”,“ItemPrice”等键。很容易在表中显示访问数组索引中的项目:
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSDictionary * item = [allItems objectAtIndex:indexPath.row];
NSString * cellTitle = [item objectForKey:@"ItemName"];
...
}
当项目cliked打开您的DetailViewController并传递对所选项目的引用:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath{
MyDetailViewController * myDetailViewController = [[MyDetailViewController alloc] init];
//MyDetailViewController should have a property of NSDictionary type, let it be "item"
myDetailViewController.item = [allItems objectAtIndex:indexPath.row];
//pass also ref to basket
myDetailViewController.basket = basket;
[self.myDetailViewController pushViewController:dvController animated:YES];
[myDetailViewController release];
}
显示详细控制器中的所有项目属性。
Basket是NSMutableDictionaries的NSMutableDictionary。每个backet项密钥是所有项中唯一的项属性,例如“ItemName”。每个backet项值应包含对原始数组中的item的引用。在MyDetailViewController中,您可以将项目添加到篮子中,如:
-(void)addToBasket{
NSDictionary * itemToAdd = [NSDictionary dictionaryWithObjectsAndKeys:
item, @"item", // this is reference to item from original array
[NSNumber numberWithInt:amount], @"amount", // or some other properties
nil];
[self.basket setObject:itemToAdd forKey:[item objectForKey:@"ItemName"]];
}
打开DetailViewController时,检查篮子是否已包含curent项目:
if ([self.basket objectForKey:[item objectForKey:@"ItemName"])
如果是这样,请显示已将固有项目添加到购物篮中,并提供删除或更改金额的选项。