我正在尝试解决一个应该很容易解决的问题。
我正在尝试转换一个根据其类通过NSArray过滤的对象,并访问一个特定于类的成员。
以下是一个例子:
for (UIView *theView in self.view.subviews) {
if ([[theView class] isSubclassOfClass:[UIToolbar class]] || [[theView class] isSubclassOfClass:[UINavigationBar class]]) {
Class theClass = [theView class];
theClass theObject = (theClass)theView;
theObject.tintColor = [UIColor colorWithRed:0/255.0f green:128/255.0f blue:255/255.0f alpha:1.0f];
}
}
我认为我会这样做,但它不会编译。
我知道我可以直接转换为UINavigationBar和UIToolbar,但是如果有很多[[theView class] isSubclassOfClass:[aClass class]]
,那么根据对象的类来构建它是有意义的。
任何帮助表示感谢。
答案 0 :(得分:2)
if ([theView respondsToSelector:@selector(setTintColor:)]) {
[theView setTintColor:[UIColor colorWithRed:0/255.0f green:128/255.0f blue:255/255.0f alpha:1.0f]];
}
答案 1 :(得分:1)
每个可写属性都有相应的setter方法;除非在属性声明中重写,否则将命名为“set”,后跟属性名称,首字母大写。你可以向任何一个班级发送任何信息,这样你就可以做到:
for (UIView *theView in self.view.subviews) {
if ([[theView class] isSubclassOfClass:[UIToolbar class]] || [[theView class] isSubclassOfClass:[UINavigationBar class]]) {
[theView setTintColor:[UIColor colorWithRed:0/255.0f green:128/255.0f blue:255/255.0f alpha:1.0f]];
}
}
要消除UIView可能无法响应setTintColor:的警告,请将theView
强制转换为id
。