0

我对目标 C 编程或多或少是新手,所以这听起来可能有点奇怪..

我正在尝试从 UIViewController 以编程方式设置许多 UITextFields 的委托,该 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 使用该对象作为接收器,它将得到解决。

有什么想法吗?

提前致谢

4

1 回答 1

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;
}

...应该为您提供所需的字段列表。[self textFieldsInView:self.view];(在 viewDidLoad 中调用。)

于 2012-04-12T14:38:03.773 回答