0

少し混乱しています。私が直面しているバグや問題ではありません。私は何かを知りたいのですが、これがこの種の質問に適しているかどうかはわかりませんが、ここに私の質問があります:

ここでの私の質問に関連して、私は2つのビューに単一のジェスチャをマッピングしようとしていました。

今、私はこれがなぜ機能しないのかを知りたがっていますか?私は、NSObjectサブクラスがある場合に、次NSStringのようにこれを追加すると言うことができるという基本を続けました。NSMutableArray

 NSString *strTest = @"Test String";
 [aryTest1 addObject:strTest];
 [aryTest2 addObject:strTest];

文字列は両方の配列に追加されます。今私がしているのは、ラベルを作成し、ラベルにタグを設定し、次のように2つのビューに追加したことです。

 UILabel *lblTemp = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 20)];
[lblTemp setTag:1];
[lblTemp setText:@"Label"];
[vw1 addSubview:lblTemp];
[vw2 addSubview:lblTemp];

これで、すべてのビューにサブビューの配列があります。そのビューのサブビューにオブジェクトを追加しようとすると、なぜこれが両方のビューに追加されないのですか?2番目のビューにはラベルが表示されていますが、最初のビューにはラベルが表示されていないという結果が得られています。

コードの最後の行にコメントを付け、vw2にラベルを追加しない場合、ラベルはvw1に追加されます。私が別のことを試みたより。

UILabel *lblTemp = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 100, 20)];
[lblTemp setTag:1];
NSMutableArray ary1 = [[NSMutableArray alloc] init];
NSMutableArray ary2 = [[NSMutableArray alloc] init];
[ary1 addObject:lblTemp];
[ary2 addObject:lblTemp];

両方の配列のカウントは1です。これは、配列にラベルが追加されていることを意味します。その後、ameの問題よりも配列のオブジェクトをビューに追加しようとしました。ラベルは2番目のビューでのみ追加されます:

 [vw1 addSubview:[ary1 objectAtIndex:0]];
 [vw2 addSubview:[ary2 objectAtIndex:0]];

初期化後にラベルのretainCountを出力すると、retaincountが1になるたびにarray1とarray2が追加されます。したがって、配列は同じオブジェクトの参照を保持していないと思います。その新しいオブジェクトが配列にコピーされます。同じビューでラベルが追加されないのはなぜですか?

オブジェクトがビューのサブビューに追加する実際の内部プロセスは何ですか。私が知っているように、サブビューは何が起こっているのかよりも配列型ですか?誰かが私を説明できますか?

前もって感謝します

4

1 に答える 1

0

違いはaddSubview、新しいビューに追加する前に、スーパービューからビューを自動的に削除することです(クラスリファレンスを参照してください:http://developer.apple.com/library/ios/ipad/#documentation/uikit/reference/uiview_class/ uiview / uiview.html)一方、配列は、別の配列にある場合でも、オブジェクトを受け入れます。

ラベルのコピーを作成して他のビューに配置することもできますが、これが必要な場合です。

于 2012-05-05T08:41:37.357 に答える