我如何从一个等于所述IBOutlet名称的字符串中引用或调用IBOutlet(UIImageView
)?
@property (weak, nonatomic) IBOutlet UIImageView *image1;
@property (weak, nonatomic) IBOutlet UIImageView *image2;
@property (weak, nonatomic) IBOutlet UIImageView *image3;
NSArray nameArray = @[@"image1", @"image2", @"image3"];
//somthing that would act as below
[nameArray[0] image] = (UIImage) PredeterminedImage;
答案 0 :(得分:2)
使用key-value coding。所以:
[self setValue:predeterminedImage forKey:nameArray[0]]
Objective-C完全反射;它在运行时知道其方法的名称,因为setter与属性名称有一个众所周知的关系,因此它可以通过字符串名称设置属性。
这就是NIB / XIB / Storyboard在现实生活中的加载方式。与其他平台不同,没有自动代码生成,只有数据。
至于iphonic的评论,你应该通过IBOutletCollection
以更好的方式解决首要问题,我认为这可能是有效的。唯一可能的问题是出口收藏是无序的;最简单的解决方法是添加一个应用排序条件的自定义setter。 E.g。
// nobody else is going to own the array, so better make it strong
@property (nonatomic, strong) IBOutletCollection(UIImageView)
NSArray *imageViews;
...
- (void)setImageViews:(NSArray *)imageViews
{
_imageViews = [imageViews sortedArrayUsingDescriptors:
@[[NSSortDescriptor
sortDescriptorWithKey:@"frame.origin.y" ascending:YES]]];
}