1

いくつかのサブビューで構成されたものを作成し、custom UIViewそれを Nib ファイルに追加しました。ビューは正しくロードされていますが、InterfaceBuilderUIViewから自分に追加しようとすると問題が発生します。custom UIView追加されたサブビューを custom の最上位のサブビューに移動したいのですが、UIView当然のことながら、サブビューはルートに追加されcustom UIViewます。

initのでマジックを実行してcustom UIView、追加したビューを移動できます。

代替手段はありますか?

これを解決するためのベストプラクティスについて何か考えはありますか?

4

3 に答える 3

0

customView、int nibファイルを追加すると、その子subViewにアクセスできないため、これは正しいようです。つまり、このカスタムビューにビューを追加すると、子ではなくルートビューにビューが追加されます。

あなたが言ったように、これを機能させるには、タグを使用してビューを定義し、コードで移動するなどの回避策を実行する必要があります

于 2012-06-26T06:17:28.553 に答える
0

必要なものを正確に取得できるように、ルートUIViewのCustom UIViewtoおよび他のすべてのサブビューを.として追加する必要があります。IB階層は以下のようになります...subview of your Root viewsubview of your Custom View

 --->Root UIView
      --->Custom UIView
           --->UItextField
           --->UIlabel
           --->UiimageView

を追加する場合は、すべてのサブビューCustom UIView in a codeに接続IBoutletしてから、それらをすべてsubview of your custom view.

于 2012-06-26T06:25:24.010 に答える
0

巧妙な解決策はないようです。layoutSubviews代わりに、次のようにオーバーライドしました。

-(void)layoutSubviews
{    
    [super layoutSubviews];
    for (UIView *subview in self.subviews){
        if (![self.internalViews containsObject:subview]) {
            [subview removeFromSuperview];
            CGRect f =subview.frame;
            f.origin.y += self.frame.origin.y;
            subview.frame = f;
            [self.contentContainer addSubview:subview];

        }
    }
}

ビューの構築を行うと、サブビューによってすべて配列に追加されましたinternalViews。これcontentContainerは、InterfaceBuilder に追加されたすべてのビューの親として機能することを目的としたビューです。

于 2012-06-26T08:51:35.363 に答える