Ios NSMutableArray在事件上未按预期更改
我可以很好地循环它们,但我想做的是改变背景颜色(对objective c来说还是新的)。以下是我所拥有的:Ios NSMutableArray在事件上未按预期更改,ios,objective-c,Ios,Objective C,我可以很好地循环它们,但我想做的是改变背景颜色(对objective c来说还是新的)。以下是我所拥有的: @interface MYViewController () @property (nonatomic, retain) NSMutableArray *listImages; @end @implementation MYViewController - (void)viewDidLoad { self.listImages = [[NSMutableArray alloc
@interface MYViewController ()
@property (nonatomic, retain) NSMutableArray *listImages;
@end
@implementation MYViewController
- (void)viewDidLoad
{
self.listImages = [[NSMutableArray alloc]initWithObjects:[UIImage imageNamed:@"bg-menuitem-highlighted.png"],
[UIImage imageNamed:@"bg-menuitem-highlighted.png"],
[UIImage imageNamed:@"bg-menuitem-highlighted.png"], nil];
[self.listImages enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) {
// do something with object
UIImage *image = [self.listImages objectAtIndex:idx];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.clipsToBounds = YES;
[self.view addSubview:imageView];
imageView.frame = CGRectMake(100*idx, 10*idx, imageView.frame.size.width + 15, imageView.frame.size.height + 15);
[imageView.layer setBorderColor: [[UIColor blackColor] CGColor]];
[imageView.layer setBorderWidth: 2.0];
imageView.contentMode = UIViewContentModeCenter;
}];
[self.view addSubview:btnEventClick];
[super viewDidLoad];
}
- (void)myEventDo:(DoEvent *)btnEventClick {
NSLog(@"My event is doing!");
int i = 0;
for (NSString *item in self.listImages) {
NSLog(@"hi");
UIImage *newImage = [self.listImages objectAtIndex:i++];
UIImageView *newImageView = [[UIImageView alloc] initWithImage:newImage];
newImageView.backgroundColor = [UIColor redColor];
}
}
我做错了什么?您正在一个全新的UIImageView上设置backgroundColor,然后没有显示它。就个人而言,我会在创建和修改UIImageView对象时创建另一个UIImageView对象数组。比如:
@interface otViewController ()
@property (nonatomic, retain) NSMutableArray *listImages;
@property (nonatomic, retain) NSMutableArray *listImageViews;
@end
@implementation otViewController
- (void)viewDidLoad
{
self.listImages = [[NSMutableArray alloc]initWithObjects:[UIImage imageNamed:@"S.png"],
[UIImage imageNamed:@"X.png"],
[UIImage imageNamed:@"O.png"], nil];
self.listImageViews = [[NSMutableArray alloc] initWithCapacity:[self.listImageViews count]];
[self.listImages enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop) {
// do something with object
UIImage *image = [self.listImages objectAtIndex:idx];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.clipsToBounds = YES;
[self.view addSubview:imageView];
imageView.frame = CGRectMake(100*idx, 10*idx, imageView.frame.size.width + 15, imageView.frame.size.height + 15);
[imageView.layer setBorderColor: [[UIColor blackColor] CGColor]];
[imageView.layer setBorderWidth: 2.0];
imageView.contentMode = UIViewContentModeCenter;
[self.listImageViews addObject:imageView];
}];
[super viewDidLoad];
}
- (IBAction)buttonClick:(id)sender {
NSLog(@"My event is doing!");
for (UIImageView *item in self.listImageViews) {
NSLog(@"hi");
item.backgroundColor = [UIColor redColor];
}
}
此外,rdelmar是正确的,您的数组是UIImage对象,而不是NSString对象 你现在的代码得到了什么结果?什么是eventClick?什么是newImageView?这一行是错误的,因为(self.listImages中的NSString*item)--listImages包含图像,而不是字符串(并且您无论如何都不会对该项执行任何操作)。@rdelmar嗨,对不起,为了简洁起见,我尝试缩短所有内容。“btnEventClick”只是一个按钮,我使用NSLog得到的结果只是控制台中的“hi”,但我没有得到任何背景颜色的更改。您想让我包含包含“btnEventClick”的文件吗?好的-您从数组中获取一个
UIImage
-您将其添加到新创建的UIImageView
中,然后设置该UIImageView
的颜色。。您的代码不应改变任何内容您正在创建多个图像视图并将它们作为子视图添加到viewDidLoad中,但随后您在myEventDo中创建了新的图像视图,这些视图永远不会作为子视图添加。这就是问题所在。您需要获取已创建的引用,而不是创建新引用。@rdelmar@rokjarc抱歉,我只是在测试一些东西。也许这是一个愚蠢的问题,但引用已经创建的文档的最佳方式是什么?