0

我正在制作一个有趣的应用程序,并想知道如何在应用程序上实现结帐/购物篮系统。

基本上,产品列表以 XML 文件的形式从 Web 服务器中提取出来,然后显示在 UITableView 控制器中。轻按单元格可让用户更详细地了解产品。

该应用程序需要能够将产品放入篮子类型的东西中,这就是我卡住的地方。

有没有我可以看的代码示例?

4

1 回答 1

0

如果您为数据选择适当的格式,则此任务很简单。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"])

如果是这样,请显示该当前项目已添加到购物篮,并提供删除或更改数量的选项。

于 2010-04-09T02:04:22.090 回答