6

nib にあるすべてのビューを見つけて、コンテンツ ビューに追加しようとしています。

これは私が持っているものです。self.viewからビューを正常に削除しますが、self.contentViewには追加しません

for (UIView *view in self.view.subviews) {
    if (view.tag != 666) {
        [view removeFromSuperview];
        [self.contentView addSubview:view];
    }
}

どんな助けでも大歓迎です。

4

7 に答える 7

7

コードの問題はremoveFromSuperview、ビューを呼び出すと、親ビューによって解放されることです。を呼び出す必要はありませんremoveFromSuperview。別のビューのサブビューとして追加するだけで、現在のparentViewから削除されます。

だから使用:

for (UIView *view in self.view.subviews)
{
    if (view.tag != 666)
    {
        [self.contentView addSubview:view];
    }
}

UIView Class Referenceによると:

addSubview :

サブビューのレシーバーのリストの最後にビューを追加します。

- (void)addSubview:(UIView *)view

パラメーター

見る

The view to be added. This view is retained by the receiver. After being added, this view appears on top of any other subviews. 

討論

このメソッドはビューを保持し、次のレスポンダーを新しいスーパービューであるレシーバーに設定します。

ビューはスーパービューを 1 つだけ持つことができます。ビューに既にスーパービューがあり、そのビューがレシーバーでない場合、このメソッドはレシーバーを新しいスーパービューにする前に以前のスーパービューを削除します。

于 2013-06-08T14:51:57.600 に答える
1

からビューを削除すると、 から削除されsuperViewます。したがって、あなたの場合、これを行う必要があります:releasememory

UINib *infoNib = [UINib nibWithNibName:@"YourXIBFileName" bundle:nil];

NSArray *topLevelObjects = [infoNib instantiateWithOwner:self options:nil];

UIView *infoView = [topLevelObjects objectAtIndex:0];
for (UIView *view in infoView.subviews) {
        [self.contentView addSubview:view];
    }
}
于 2013-06-08T17:23:09.787 に答える
0

指定したビューをプロパティとして設定するか、ビューをスーパー ビューから削除する前にコンテンツ ビューに追加することができます。ビューを削除するタイミングがわかりません。ビューの保持カウントが 0 に減ると、スーパー ビューが呼び出されて割り当てが解除されます。

于 2012-06-15T09:27:55.983 に答える
-1

これが機能するかどうかはわかりませんが、 と を切り替え[view removeFromSuperview];てみてください[self.contentView addSubview:view];。これは、UIViewClass ReferenceによるremoveFromSuperviewと、スーパービューがビューを解放するためです。

お役に立てれば!

于 2012-06-15T03:34:09.837 に答える
-1

エラーを確認します。これらのビュー (self.view、self.contentView) のフレームを印刷したほうがよいでしょう。そしてそれらを異なる色にします。その後、バグを見ることができます。幸運を!

于 2012-06-15T03:46:47.757 に答える
-1

contentViewのプロパティに属していませんUIVewUITableViewCellのプロパティに属します。セル オブジェクトのコンテンツ ビューを返します。

于 2012-06-15T05:23:41.057 に答える