子类与Root Class通信

时间:2013-05-15 09:53:41

标签: ios delegates objective-c-category

我正在尝试制作动态注册表单结构。因此,基于提供xml或数据,它将生成动态表单。这是我的类层次结构的屏幕截图。

enter image description here

这里,Form类是基类。根据提供的数据,它将生成需要创建多少页面的表单。每个页面可以有一个表但只有一个或多个组(实际上是剖面视图)。每个组都有自定义字段,自定义字段可以包含特殊的TextFeild或Dropdown字段或ImageField。

以下是生成的表单屏幕:

enter image description here

我现在面临的问题是:我的Page.m类包含表视图委托方法,我需要从我的CF_Fields类中触发一个Event。例如:CFImageView包含ImagePickerController委托方法。从库中挑选图像时,我需要展开表格视图单元格高度。但我没有从CFImageView类访问该事件。

类层次结构是: “表单”包含“页面”类(表逻辑在这里) “Page”包含“组”类 “Group”包含“CustomFeild”类 “CustomFeild”包含“FieldView”类 “FieldView”包含“CFTextField”或“CFDropdown”或“CFImageView”类

我需要从Page class的底层类中激活一个事件。

我是否需要继承所有课程,或者我是否需要使用委托或是否应该维护类别?

1 个答案:

答案 0 :(得分:0)

我用以下方式沟通。但我不知道这是不是正确的方式!

-(void)pageViewUpdate
{
    BOOL found = FALSE;
    UIView *currentSuperView = self;

    while (!found) {
        if ([[currentSuperView superview] isKindOfClass:[CustomField class]]) {
            CustomField *customField = (CustomField *)[currentSuperView superview];
            customField.height = CUSTOM_FIELD_IMAGE_HEIGHT+CUSTOM_FIELD_IMAGE_VIEW_CELL_HEIGHT_PADDING;
        }

        if([[currentSuperView superview] isKindOfClass:[Page class]])
        {
            found = TRUE;
            Page *page = (Page *)[currentSuperView superview];
            [page updateTableView];
        }

        currentSuperView = [currentSuperView superview];
    }
}

我正在搜索我想要的superview类,然后访问必要的属性。