我正在制作一个有趣的应用程序,并想知道如何在应用程序上实现结帐/购物篮系统。
基本上,产品列表以 XML 文件的形式从 Web 服务器中提取出来,然后显示在 UITableView 控制器中。轻按单元格可让用户更详细地了解产品。
该应用程序需要能够将产品放入篮子类型的东西中,这就是我卡住的地方。
有没有我可以看的代码示例?
我正在制作一个有趣的应用程序,并想知道如何在应用程序上实现结帐/购物篮系统。
基本上,产品列表以 XML 文件的形式从 Web 服务器中提取出来,然后显示在 UITableView 控制器中。轻按单元格可让用户更详细地了解产品。
该应用程序需要能够将产品放入篮子类型的东西中,这就是我卡住的地方。
有没有我可以看的代码示例?
如果您为数据选择适当的格式,则此任务很简单。ObjC 中最自然的 XML 表示是 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"];
...
}
当项目单击打开您的 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。每个后备项目键是所有项目中唯一的一些项目属性,例如“ItemName”。每个后备项值应包含对原始数组中项的引用。在 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 检查篮子是否已经包含当前项目:
if ([self.basket objectForKey:[item objectForKey:@"ItemName"])
如果是这样,请显示该当前项目已添加到购物篮,并提供删除或更改数量的选项。