2010-03-23 5 views
0

J'ai trois images que je veux parcourir lorsque je clique sur un UIButton.UIButton qui parcourt les images lorsque vous cliquez sur

Comment ferais-je cela?

C'est ce que j'ai jusqu'ici, mais ça ne marche pas vraiment.

//the images 
NSString* imageNames[] = {"MyFirstImage", "AnotherImage", whatever else}; 
int currentImageIndex = 0; 

et

- (IBAction)change{ 
UIImage* imageToShow = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource: imageNames[currentImageIndex] ofType:@"png"]; 

if(currentImageIndex++ == sizeof(imageNames)/sizeof(NSString)) //check to see if you hit the last image 
{ 
    currentImageIndex = 0; //start over 
} 
} 

Idées?

Toute aide sera grandement appréciée! Merci!

Répondre

1

La suggestion de Steven de sous-classer UIButton est bonne. Une fois que vous aurez acquis de l'expérience avec Objective C, vous devriez considérer son approche, mais je peux dire par le code que vous avez publié que vous êtes nouveau dans Objective C, vous devrez donc apprendre à utiliser les classes Foundation Foundation .

L'une des raisons pour lesquelles votre code ne fonctionne pas est que vous essayez de transmettre des littéraux de chaîne C à pathForResource:, ce qui nécessite un objet NSString. Les NSStrings sont des objets dans Objective C, pas des pointeurs de caractères comme dans C. Vous pouvez construire un objet NSString en utilisant la syntaxe littérale, @ "quotes-with-an-at-in-front".

Voici le code qui implémente l'algorithme que vous avez essayé d'écrire, en utilisant des classes Objective C Foundation plutôt que les types de données C:

// YourController.h 
@interface YourController : UIViewController { 
    NSArray *imageNames; 
    NSInteger currentImageIndex; 
    UIButton *yourButton; 
} 
@property (nonatomic, retain) NSArray *imageNames; 
@property (nonatomic, retain) IBOutlet UIButton *yourButton; // Presumably connected in IB 
- (IBAction)change; 
@end 
// YourController.m 
#import "YourController.h" 
@implementation YourController 
@synthesize imageNames, yourButton; 

- (void)dealloc { 
    self.imageNames = nil; 
    self.yourButton = nil; 
    [super dealloc]; 
} 

- (void)viewDidLoad { 
    self.imageNames = [NSArray arrayWithObjects:@"MyFirstImage", @"AnotherImage", nil]; 
    currentImageIndex = 0; 
    [super viewDidLoad]; 
} 

- (IBAction)change { 
    UIImage* imageToShow = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[imageNames objectAtIndex:currentImageIndex] ofType:@"png"]; 
    currentImageIndex++; 
    if (currentImageIndex >= imageNames.count) { 
     currentImageIndex = 0; 
    } 
    [yourButton setImage:imageToShow forState:UIControlStateNormal]; 
} 

@end 
+0

Merci! Cela a fonctionné à merveille. – dot

0

Vous voudrez sous-classer UIButton et ajouter une nouvelle propriété qui maintient l'état. Vous voudrez également avoir trois propriétés pour maintenir les images des trois nouveaux états. Ensuite, dans votre méthode "drawRect:", permutez les images de boutons standard en fonction de votre état, puis appelez la méthode [super drawRect:].

+0

qui semble être une façon très complexe d'y parvenir. Est-ce le seul moyen? – dot

Questions connexes