0

我有些困惑。不是我面临的真正的错误或问题。我想知道一些事情,但我不确定这是解决这类问题的正确地方,但这是我的问题:

关于我的问题,我试图在两个视图上映射单个手势。

现在我很想知道为什么这不起作用?我继续进行基础知识,以防万一我有任何 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];

现在每个视图都有一个子视图数组。当我们尝试在该视图的子视图中添加一个对象时,为什么两个视图中都没有添加这个对象?我得到的结果是我的第二个视图显示了标签,但第一个视图没有标签。

如果我注释了代码的最后一行并且不在 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。这意味着我在数组中添加了标签。之后,我尝试在视图中添加数组的对象而不是问题。标签仅在第二个视图中添加:

 [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 回答