在UIViewController中设置UIView的最佳方法?

时间:2012-06-02 10:46:49

标签: objective-c ios xcode ios5

我想知道我设置UIViewController的方法是最优的还是简单的愚蠢。

我在某个类别中输入了一个enum。让我们说6个不同的类别。 因此,取决于所选类别。我的UIViewController有一个开关,它将根据所选类别调用不同的方法来设置我的UIView。

只是想知道这是否是一个很好的方法,或者我应该考虑创建6个不同的UIViewControllers?

非常感谢与赞成和赞成的讨论。

感谢。

它们基本相同。

示例代码:

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

2 个答案:

答案 0 :(得分:1)

取决于你的情况。如果视图控制器相似,那么这是有道理的。但如果它们彼此完全不同,请使用单独的子类。

答案 1 :(得分:1)

我会按照以下方式实现它 •我会为我需要的UIView类型提供几个UIView派生类 例如,我会VegatableViewDiaryView •这些视图中的每一个都具有相同的基类,例如MyBaseView •MyBaseView将有一个名为setup的函数,这个函数需要在我的每个派生类中实现(蔬菜和日记) •根据您的枚举,我将创建其中一个具体类并调用设置函数

示例:

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并实现专门用于新视图的设置功能 因此增加了对象解耦和降低复杂性