Предложение Стивена подкласса UIButton является хорошим. После того, как вы получите больше опыта с Objective C, вы должны рассмотреть его подход, но я могу сказать по коду, который вы опубликовали, что вы новичок в Objective C, поэтому вам может потребоваться сначала изучить базовые классы Foundation ,
Одна из причин, по которой ваш код не работает, заключается в том, что вы пытаетесь передать строковые литералы C в pathForResource :, для чего требуется объект NSString. NSStrings являются объектами Objective C, а не указателями символов, так как они находятся в C. Вы можете построить объект NSString с использованием литерала синтаксиса @ "quotes-with-an-at-in-front".
Вот код, который реализует алгоритм вы пытались написать, используя Objective классов C Foundation, а не тип данных 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
Спасибо! Это сработало чудесно. – dot