1

UILabelどのタイプのUIImageViewかわからないオブジェクトがありますUIButton。3つすべての使用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];
    }

私の質問は、そのフレームを再び取得する方法です。 idtype 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 に答える