2012-05-05 13 views
0

私はいくつかの混乱があります。私が直面しているバグや問題ではありません。私は何かを知りたいと思うが、これはこの種の質問のための適切な場所であるとは思わないが、ここに私の質問です:単一のオブジェクト(UIView、UIGesture)を2つの他のオブジェクト(UIView)とマッピングすることはできませんか?

私のQuestion Hereに関して、私は2つのビューに1つのジェスチャーをマッピングしようとしていました。

これがなぜ機能していないのですか?私は場合には、私はすべてのNSObjectのサブクラスは、次のようにNSStringと私はNSMutableArrayでこれを追加すると言うことができます持っていることを基本的に行ってきました:

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

文字列は、配列の両方に追加されます。

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

は今、すべてのビューは、サブビューの配列があります。今私がやっていることは、私は、ラベルを作成したラベルのタグを設定し、2つのビューで、次のように付け加えています。そのビューのサブビューにオブジェクトを追加しようとすると、なぜこれは両方のビューで追加されないのでしょうか? 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があります。これは、配列にラベルが追加されていることを意味します。その後、私は問題よりも配列のオブジェクトをビューに追加しようとしました。ラベルは、第2のビューに追加される:

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

Iは、ラベルのretainCountが後に初期化に印刷する場合、毎回配列1および配列2にretaincountを追加するだから、配列が同じオブジェクトの参照を保持していないと思う1でした。新しいオブジェクトが配列にコピーされます。ラベルが同じビューで追加されていない理由

ビューのサブビューに追加するオブジェクトの実際の内部プロセスとは何ですか。私が知っているように、サブビューは何が起こっているよりもArray型ですか?誰も私を説明することはできますか?配列は喜んでもそれならば、オブジェクトを受け入れるながら:違いはaddSubviewが自動的にそれからの眺めは(http://developer.apple.com/library/ios/ipad/#documentation/uikit/reference/uiview_class/uiview/uiview.htmlクラスのリファレンスを参照してください)新しいビューに追加する前に、スーパービューの削除ということであるアドバンス

+1

retainCountは役に立たない。それを呼び出さないでください。 – bbum

+0

私は知っている。私は配列にオブジェクトを追加するとメモリ内で何が起こるのか知るために呼び出されました。答えはNOでした。 –

答えて

0

感謝別の配列にあります。

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

関連する問題