私は楽しみのためにアプリを作っていますが、アプリにチェックアウト/バスケットシステムを実装する方法を知りたいです。
基本的に、製品のリストはXMLファイルの形式でWebサーバーから取得され、UITableViewコントローラーに表示されます。セルをタップすると、ユーザーは製品のより詳細な概要に移動します。
アプリは製品をバスケットタイプのものに入れることができる必要があります、そしてこれは私が立ち往生しているところです。
私が見ることができるコードサンプルはありますか?
私は楽しみのためにアプリを作っていますが、アプリにチェックアウト/バスケットシステムを実装する方法を知りたいです。
基本的に、製品のリストはXMLファイルの形式でWebサーバーから取得され、UITableViewコントローラーに表示されます。セルをタップすると、ユーザーは製品のより詳細な概要に移動します。
アプリは製品をバスケットタイプのものに入れることができる必要があります、そしてこれは私が立ち往生しているところです。
私が見ることができるコードサンプルはありますか?
データに適切な形式を選択すれば、このタスクは簡単です。ObjCで最も自然なXML表現は、NSDictionaries/NSArraysツリーです。最も単純なケースでは、アイテムのNSArray(テーブルビューに表示するもの)があり、それぞれが「ItemName」、「ItemPrice」などのキーを持つNSDictionaryです。セルインデックスを使用して配列内のアイテムにアクセスするテーブルに簡単に表示できます。
-(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];
}
詳細コントローラにすべてのアイテムプロパティを表示します。
バスケットは、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"])
もしそうなら、その現在のアイテムがすでにバスケットに追加されていることを示し、それを削除するか、金額を変更するオプションを提供します。