以编程方式将委托设置为每个UITextField

时间:2012-04-12 14:19:14

标签: objective-c ios

我或多或少是客观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使用该对象作为接收器它将被解决。

有关于此的任何想法吗?

提前致谢

1 个答案:

答案 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];。)