Pregunta

Estoy haciendo una aplicación para la diversión y me gustaría saber cómo implementar un sistema de pago y / cesta en la aplicación.

Básicamente, una lista de productos que se tira desde un servidor web en forma de archivo XML, que luego se muestra en un controlador de UITableView. Un toque en la célula lleva al usuario a una descripción más detallada del producto.

La aplicación tendría que ser capaz de obtener el producto en una cosa de tipo cesta, y aquí es donde me estoy atascado.

¿Hay ejemplos de código que podría echar un vistazo a?

¿Fue útil?

Solución

Esta tarea es simple si se elige el formato apropiado para sus datos. La mayoría represantation XML natural en ObjC es NSDictionaries / árbol NSArrays. En caso de que usted tiene simlest NSArray de artículos (los que se muestran en tableview) cada uno de ellos es NSDictionary con teclas como "NombreDeElemento", "itemprice", etc. Es fácil mostrar en la tabla para acceder a los elementos de array con índice de células:

-(UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSDictionary * item = [allItems objectAtIndex:indexPath.row];
    NSString * cellTitle = [item objectForKey:@"ItemName"];
    ...
}

Cuando la opción abierta cliked su DetailViewController y pasan referencia al artículo seleccionado:

-(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]; 

}

para mostrar todos los propiedades de los elementos en el controlador detalle.

Su cesta está NSMutableDictionary de NSMutableDictionaries. Cada tecla del elemento backet es alguna propiedad artículo único entre todos los elementos, por ejemplo, "NombreDeElemento". Cada valor del artículo backet debe contener referencia a elemento de matriz original. En MyDetailViewController se puede añadir el artículo a la cesta como:

-(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"]]; 
}

Cuando está abierto cheque DetailViewController si cesta ya contiene elemento curent:

if ([self.basket objectForKey:[item objectForKey:@"ItemName"])

y si es así, mostrar que el tema ya curent añadido a la cesta, y proporcionar la opción de eliminarlo o la cantidad de cambio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top