使用IF语句显示视图

时间:2014-02-24 21:42:18

标签: ios objective-c drawrect

我正在创建一个iOS应用,我需要根据API调用的结果显示不同的视图。在我正在查询数据库,保存结果,然后使用此结果形成一个IF语句,我加载正确的视图,如此

CGRect rect = CGRectMake(180.0f, 24.0f, self.view.frame.size.width, self.view.frame.size.width);
JHView *myView = [[JHFewCloudsView alloc] initWithFrame:rect];
[self.view myView];

虽然这很有效,但它似乎很简单,就像一个简单任务的代码一样。有没有更好的方法来拥有多个视图?您可以在一个视图中使用多个- (void)drawRect:(CGRect)rect,只需调用您需要的相关视频吗?

    if ([icon  isEqual: @"01d"])
    {
        CGRect rect = CGRectMake(180.0f, 24.0f, self.view.frame.size.width, self.view.frame.size.width);
        JHSunView *sunView = [[JHSunView alloc] initWithFrame:rect];
        [self.view addSubview:sunView];

    } else if ([icon isEqualToString:@"02d"])
    {
        CGRect rect = CGRectMake(180.0f, 24.0f, self.view.frame.size.width, self.view.frame.size.width);
        JHFewCloudsView *fewCloudsView = [[JHFewCloudsView alloc] initWithFrame:rect];
        [self.view addSubview:fewCloudsView];
    }

我现在这样做的方式意味着我最终会得到15种不同的视图和非常混乱的代码。

2 个答案:

答案 0 :(得分:0)

如果您的代码与问题中显示的重复(唯一的区别是类名),那么您可以创建一个字典,其中键是if语句中的字符串,值是名称类(作为字符串)。然后你的代码变成:

Class viewClass = NSClassFromString([self.viewConfig objectForKey:icon]);
CGRect rect = CGRectMake(180.0f, 24.0f, self.view.frame.size.width, self.view.frame.size.width);
UIView *newView = [[[viewClass alloc] initWithFrame:rect];
[self.view addSubview: newView];

答案 1 :(得分:0)

在Objective-C中,每个类都由一个对象(类型为Class)表示,您可以像对待其他对象一样对待它。特别是,您可以使用Class作为字典中的值,将其存储在变量中,然后发送消息。因此:

static NSDictionary *viewClassForIconName(NSString *iconName) {
    static dispatch_once_t once;
    static NSDictionary *dictionary;
    dispatch_once(&once, ^{
        dictionary = @{
            @"01d": [JHSunView class],
            @"02d": [JHFewCloudsView class],
            // etc.
        };
    });
    return dictionary;
}

- (void)setViewForIconName:(NSString *)iconName {
    Class viewClass = viewClassForIconName(iconName);
    if (viewClass == nil) {
        // unknown icon name
        // handle error here
    }
    CGRect rect = CGRectMake(180.0f, 24.0f, self.view.frame.size.width, self.view.frame.size.width);
    UIView *view = [[viewClass alloc] initWithFrame:rect];
    [self.view addSubview:view];
}