Pergunta

Estou fazendo um aplicativo por diversão e gostaria de saber como implementar um sistema de checkout/cesto no aplicativo.

Basicamente, uma lista de produtos é retirada de um servidor da Web na forma de arquivo XML, que é exibido em um controlador UitableView. Um toque na célula leva o usuário a uma visão geral mais detalhada do produto.

O aplicativo precisaria colocar o produto em uma coisa do tipo cesto, e é aqui que estou ficando preso.

Existem amostras de código que eu poderia dar uma olhada?

Foi útil?

Solução

Esta tarefa é simples se você escolher o formato apropriado para seus dados. O XML mais natural representa em objc é a árvore nsdictionaries/nsarrays. No caso mais simples, você tem itens de itens (aqueles que você mostra no TableView), cada um deles é nsdictionary com chaves como "ItemName", "ItemPrice" etc. É fácil mostrar em itens de acesso à tabela na matriz com índice de células:

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

Quando o item clique abrir seu detalheViewController e passar referência ao item selecionado:

-(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 todas as propriedades do item no controlador detalhado.

O cesto é o nsmutabledictionary of nsmutabledicties. Cada chave do item de backet é uma propriedade de item exclusiva entre todos os itens, por exemplo, "ItemName". Cada valor do item de backet deve conter referência ao item na matriz original. No MyDetailViewController, você pode adicionar item à 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"]]; 
}

Quando o Open detalheViewController verifique se o cesto já contém item curente:

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

E se assim for, mostre esse item curente já adicionado à cesta e forneça opção para removê -lo ou alterar o valor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top