2010-08-16 3 views
-2

comment est-il possible de créer un onglet iphone qui charge des données sélectionnées à partir d'un tableau et change en fonction de la sélection de l'utilisateur.création d'un onglet de favoris iphone

+0

C'est possible. Votre question, cependant, est trop vague. –

Répondre

1

Alx,

Un scénario simple serait de créer une base NIB-UITableViewCell (il y a beaucoup de tutoriels là-bas pour cela) qui a une étiquette sur elle d'une certaine sorte. Ce que vous pouvez faire est alors attraper le contenu de l'étiquette lorsque l'utilisateur sélectionne la cellule et la stocker dans un tableau mutable qui puis est stocké dans le NSUserDefaults.

Vous pouvez ensuite accéder au NSUserDefaults depuis un autre affichage et l'utiliser pour remplir un onglet "Favoris" comme vous l'avez demandé.

Un petit échantillon de code pour vous aider (en supposant que les données d'origine se trouvent dans un UITableView comme vous l'avez dit dans une question précédente). J'écris ceci de haut en bas (code non testé), donc vous devrez trouver des bugs, mais l'idée est correcte.

// in the .h file 
#import <UIKit/UIKit.h> 

@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { 

    // set up a mutable array which allows editing of the array 
    NSMutableArray *myFavoritesData; 

} 
// set up a retained property 
@property (nonatomic, retain) NSMutableArray *myFavoritesData; 

@end 


// in the .m file 
// synthesize the getters/setters for your array 
@synthesize myFavoritesData; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // find cell that was just pressed 
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

    // get pointer for the label that we want to identify the cell by 
    // the tag in this case is set to '5' in Interface Builder in the options for the label 
    UILabel *someLabel; 
    someLabel = (UILabel *)[cell viewWithTag:5]; 

    NSString *tmpFavorite = someLabel.text; 

    // get the count of the current array and use that for the "new" row since the count 
    // will always be 1 larger than the last object in the array (arrays start at 0, counts start at 1) 
    NSUInteger newRow = [self.myFavoritesData count]; 
    [self.myFavoritesData insertObject:tmpFavorite atIndex:newRow]; 

} 

// save the mutable array into NSUserDefaults when the view is about to disappear 
- (void) viewWillDisappear:(BOOL)animated 
{ 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setObject:self.myFavoritesData forKey:@"MyFavorites"]; 

    // synchronize the data now instead of waiting for the OS to synchronize it at some 
    // arbitrary time in the future 
    [userDefaults synchronize]; 

} 

Une fois que vous êtes dans le nouveau contrôleur de vue, vous pouvez lire juste du NSUserDefaults et alimenter le tableau du tableau. Par exemple:

// favorites view controller 
- (void)viewDidLoad { 

    [super viewDidLoad]; 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    NSMutableArray *tmpArray = [[NSMutableArray alloc] init]; 
    tmpArray = [[userDefaults objectForKey:@"MyFavorites"] mutableCopy]; 

     if ([tmpArray count] == 0) { 

      // 
      // no favorites have ever been saved 
      // 


     } else { 

      // load the favorites into some array you synthesized just like before 
      self.tableFavoritesData = [[NSMutableArray alloc] init]; 
      self.tableFavoritesData = [[userDefaults objectForKey:@"MyFavorites"] mutableCopy]; 

      NSLog(@"favorites data is %d and %@", [self.tableFavoritesData count], self.tableFavoritesData); 

} 

[tmpArray release]; 
} 

Ensuite, dans votre cellForRowAtIndexPath des favoris View Controller vous suffit d'accéder chaque chaîne dans chaque index du tableau (donc, chaîne pour l'index 0 entrerait dans la ligne 0, chaîne pour index 1 entreraient en rangée 1, etc) et c'est ce qui peuplerait votre table de favoris!

Essayez-le.

+0

merci beaucoup j'ai eu la structure de ce que je suis en train d'essayer de réaliser maintenant ... un petit problème im ayant pourtant c'est que je ne veux pas obtenir le contenu des cellules. Je veux obtenir le contenu de la vue affichée par la cellule. Je devine que vous devez changer ce code UILabel * someLabel; someLabel = (UILabel *) [cellule viewWithTag: 5]; NSString * tmpFavorite = someLabel.text; ? i essayé d'utiliser le (? [[RootArray objectAtIndex: indexPath] ensemble], mais il n'a pas vraiment travailler sur :( –

+0

Comment avez-vous 'rootArray' défini S'il est défini similaire à la façon dont je définissais mes tableaux mutables ci-dessus, vous feriez: '[self.rootArray objectAtIndex.indexPath.row];' où 'indexPath.row' est un int et spécifie la ligne courante pressée – iwasrobbed

Questions connexes