1

我有一个我不知道是什么类型的对象,它可能是UILabelUIImageView或者UIButton。我正在检查所有三个使用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输入 don't have property frame。关于如何做到这一点的任何想法?

4

3 回答 3

4

所有这些类都有一个共同的祖先;UIView. 所以盲目地投掷idUIView击倒自己:

UIView *obj2View = (UIView *)obj2;
obj2View.frame = CGRectMake(x, y, w, h);
CGRect r = obj2View.frame;
于 2013-08-01T09:33:51.463 回答
2

您可以UIView通过以下方式将它们转换为:

[(UIView *)obj2 frame]

你似乎已经在做什么了,我不明白你的问题是什么?或者,如果 'id' 保证是 的子类UIView,根据您的示例,它似乎是,UIView而不是id首先使用。

于 2013-08-01T09:31:55.153 回答
0

它无需铸造即可工作。尝试这个。它在我的最后工作。:

  id obj2 = some object;
  CGRect frame = someFrame;
  [obj2 setFrame:frame];
于 2013-08-01T09:33:41.677 回答