我或多或少是客观C编程的新手,所以这听起来有点奇怪......
我正在尝试以编程方式从UIViewController设置许多UITextField的委托,该UIViewController是包含UITextfields的实际UIViewController的父节点。 基本上它与右键单击UITextField相同,并将UIViewController设置为此控件的委托。
我试图循环self.view.subview数组,但我只得到2个UIImageViews(我仍然试图理解这个...我认为是关于使用静态细胞但是我很困惑)。所以下一个选择是循环遍历该类的所有属性。
使用stackoverflow代码的混合我几乎已经完成了,但我仍然需要将消息发送到文本字段本身。
unsigned int count = 0;
objc_property_t *properties = class_copyPropertyList( [self class], &count );
for( unsigned int i = 0; i < count; i++ ) {
objc_property_t property = properties[i];
const char* propertyName = property_getName(property);
NSLog( @"property: %s", propertyName ); //this is actually correctly writing the name of the properties
objc_msgSend((id)GetTheObjectThroughTheName, @selector(setDelegate:), self);
}
事情是我不知道如何使用属性的名称获取与属性相关的对象...但是如果我可以得到它并使用objc_msgsend使用该对象作为接收器它将被解决。
有关于此的任何想法吗?
提前致谢
答案 0 :(得分:0)
我认为如果你通过视图层次结构来维护会更容易。有点像...
- (NSArray *)textFieldsInView:(UIView *)view {
NSMutableArray * fields = [NSMutableArray array];
for (UIView *sub in [view subviews]) {
if ([sub isKindOfClass:[UITextField class]]) {
[fields addObject:sub];
} else if ([[sub subviews] count] > 0) {
[fields addObjectsFromArray:[self textFieldsInView:sub]];
}
}
return fields;
}
...应该为您提供所需字段列表。 (在viewDidLoad中调用[self textFieldsInView:self.view];
。)