将id转换为未知的Class类型并获取其框架

时间:2013-08-01 09:29:53

标签: ios objective-c

我有一个我不知道的对象是什么类型,可能是UILabelUIImageViewUIButton。我正在使用if条件检查所有三个。

    if([obj2 isKindOfClass:[UIImageView class]])
    {
        [(UIImageView*)obj2 setFrame:frame];
    }
    else if ([obj2 isKindOfClass:[UILabel class]])
    {
        [(UILabel*)obj2 setFrame:frame];
    }
    else
    {
        [(UIButton*)obj2 setFrame:frame];
    }

我的问题是如何再次获取其框架,id类型没有属性frame。有关如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:4)

所有这些班级都有共同的祖先; UIView。所以盲目地将id投射到UIView并将自己打倒:

UIView *obj2View = (UIView *)obj2;
obj2View.frame = CGRectMake(x, y, w, h);
CGRect r = obj2View.frame;

答案 1 :(得分:2)

您可以通过执行以下操作将其转换为UIView

[(UIView *)obj2 frame]

你似乎已经在做什么了,我看不出你的问题是什么?或者,如果'id'保证是UIView的子类,在您的示例中看起来似乎是这样,首先使用UIView而不是id

答案 2 :(得分:0)

无需施法即可使用。试试这个。它正在我的工作。 :

  id obj2 = some object;
  CGRect frame = someFrame;
  [obj2 setFrame:frame];