1

動的な登録フォーム構造を作成しようとしています。したがって、提供する xml またはデータに基づいて、動的フォームが生成されます。これが私のクラス階層のスクリーンショットです。

ここに画像の説明を入力

ここで、Form クラスは Base Class です。提供されたデータに応じて、作成する必要があるフォームのページ数が生成されます。各ページには 1 つのテーブルを含めることができますが、1 つまたは複数のグループ (実際にはセクション ビュー) を含めることができます。すべてのグループにはカスタム フィールドがあり、カスタム フィールドには特別な TextFeild または Dropdown フィールドまたは ImageField を含めることができます。

生成されたフォーム画面は次のとおりです。

ここに画像の説明を入力

私が今直面している問題は次のとおりです。私の Page.m クラスにはテーブル ビューのデリゲート メソッドが含まれており、CF_Fields クラスからイベントを発生させる必要があります。例: CFImageView には ImagePickerController Delegate メソッドが含まれています。画像がライブラリから選択されたら、テーブル ビューのセルの高さを拡張する必要があります。しかし、CFImageView クラスからのイベント アクセスはありません。

クラス階層は次のとおりです。 「フォーム」には「ページ」クラスが含まれます (テーブル ロジックはここにあります) 「ページ」には「グループ」クラスが含まれます 「グループ」には「CustomFeild」クラスが含まれます 「CustomFeild」には「FieldView」クラスが含まれます 「FieldView」には「CFTextField」が含まれますまたは「CFDropdown」または「CFImageView」クラス

Page クラスの下位クラスからイベントを発生させる必要があります。

すべてのクラスを継承する必要がありますか、それともデリゲートを使用する必要がありますか、それともカテゴリを維持する必要がありますか?

4

1 に答える 1

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

目的のスーパービュー クラスを検索して、必要なプロパティにアクセスしています。

于 2013-05-15T16:03:35.540 に答える