0

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

我已经对一些类别的枚举进行了类型定义。假设有 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;
...
}
4

2 回答 2

1

我将按以下方式实现它 • 我将有几个 UIView 派生类,每个派生类对应于我需要的 UIView 类型 例如,我将拥有VegatableView并且DiaryView • 这些视图中的每一个都将具有相同的基类,例如MyBaseView • MyBaseView 将具有调用setup此函数的函数将需要在我的每个派生类(蔬菜和日记)中实现 • 根据您的枚举,我将创建这些具体类之一并调用 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 并实现一个专门用于新视图的设置函数因此增加对象解耦和降低复杂性

于 2012-06-02T11:21:35.873 回答
1

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

于 2012-06-02T10:48:20.270 回答