假设我有一个对象,可能是UIImageView
...
是.hidden = NO;
alpha是.alpha = 0.425;
背景颜色为[UIColor blackColor];
无论如何,如果我有另一个UIImageView
,我可以设置所有属性以匹配此UIImageView's
属性。
imageView2.properties = imageView1.properties;
也许是for-loop
?类似的东西:
//for (properties *property in object1) {
或者我必须经历各种可能性。
imageView2.alpha = imageView1.alpha;
imageView2.hidden = imageView1.hidden;
imageView2.backgroundColor = imageView1.backgroundColor;
imageView2.center = imageView1.center
//etc.
答案 0 :(得分:4)
如果您正在使用一组特定属性,则可以构建其名称数组,然后使用键值编码来设置它们:
for(NSString * key in @[@"hidden", @"frame", @"backgroundColor"]) {
[toObject setValue:[fromObject valueForKey:key] forKey:key];
}
如果要复制任何对象的所有属性,可以使用class_copyPropertyList()
函数获取类的声明属性列表。 {1}}。不过,这有很多警告:
换句话说,它很可能以可怕的方式打破。除非你真的知道你在做什么,否则不要这样做。
答案 1 :(得分:3)
对于属性的固定列表,您可以使用键值编码:
NSArray *propList = @[@"alpha", @"hidden"];
NSDictionary *dict = [imageView1 dictionaryWithValuesForKeys:propList];
[imageView2 setValuesForKeysWithDictionary:dict];
您可以通过使用Objective-C运行时函数class_copyPropertyList()
来复制所有属性,以在运行时动态确定属性。
但我发现有两个问题:
alpha
不是UIImageView
的属性,而是UIView
的属性。