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
Merci! Cela a fonctionné à merveille. – dot