0

UIViewController をセットアップする方法が最適なのか、それとも単純にばかげているのか疑問に思っています。

いくつかのカテゴリで列挙型を型定義しました。6つの異なるカテゴリがあるとしましょう。したがって、どのカテゴリが選択されているかによって異なります。私の UIViewController には、選択したカテゴリに従って UIView をセットアップするために別のメソッドを呼び出すスイッチがあります。

これがこれを行うための良い方法なのか、それとも 6 つの異なる UIViewController を作成することを検討すべきなのか疑問に思っていますか?

賛否両論の議論は大歓迎です。

ありがとう。

それらは基本的に同じです。

サンプルコード:

switch (self.category) {
    case vegetables:
        recipe = [[[WebServices sharedInstance].recipeDictionary objectForKey:self.chosenCategory] objectAtIndex:4]; //Needs to be made random
        descriptionText.text = recipe.recipeDescription;
        [self setupText];
        [self setupVegetablesView];
        break;
    case dairy:
        recipe = [[[WebServices sharedInstance].recipeDictionary objectForKey:self.chosenCategory] objectAtIndex:4]; //Needs to be made random
        descriptionText.text = recipe.recipeDescription;
        [self setupText];
        [self setupDairyProductsView];
        break;


- (void)setupVegetablesView
{
    descriptionText.textColor = [UIColor colorWithRed:0/255.0 green:103/255.0 blue:55/255.0 alpha:1];

    background.image = imageBackgroundVegetables;
    topBar.image = topBarForVegetables;
    subtitle.image = subtitleImageVegetables;
    subtitleLink.image = subtitleLinkBarVegetables;
...
}
4

2 に答える 2

1

次のように実装します。•必要なUIViewのタイプに応じてそれぞれ複数のUIView派生クラスを作成します。たとえば、次のようにVegatableViewなりDiaryView ます。•これらのビューのそれぞれに、たとえば次の同じ基本クラスがありMyBaseView ます。•MyBaseViewにはこの関数と呼ばれるsetup関数は、派生クラス(野菜と日記)のそれぞれに実装する必要があります。•列挙型に応じて、これらの具象クラスの1つを作成し、セットアップ関数を呼び出します。

例:

switch (self.category) {
    MyBaseView recipe;
    case vegetables:
        //Create an instance of VegetableView
        recipe = [[VegetableView alloc] init];
        break;
    case dairy:
        //Create an instance of DiaryView
        recipe = [[VegetableView alloc] init];
        break;
}
//Call setup for the created view
[recipe setup];

//Setup function in vegetableView.m
- (void)setup
{
    //Do some vegetable setup stuff
}

//Setup function in diaryView.m
- (void)setup
{
    //Do some diary setup stuff
}

このようにして、異なるコードを最小限に抑え、両方のタイプのビューでパラメーターを等しくします。また、新しいビューの追加はかなり簡単です。MyBaseViewをサブクラス化し、新しいビューに特化したセットアップ関数を実装します。したがって、オブジェクトの分離と複雑さの軽減

于 2012-06-02T11:21:35.873 に答える
1

状況によります。ビューコントローラーが似ている場合、これは理にかなっています。ただし、それらが互いに完全に異なる場合は、別々のサブクラスを使用してください。

于 2012-06-02T10:48:20.270 に答える