Xcode addSubview具有唯一名称

时间:2012-10-03 19:38:22

标签: iphone ios xcode uiimageview uiimage

我有一个创建UIImageView的按钮,允许用户从库中选择图像。

它也作为var增加,称为“数量”一个

如果他再次按下按钮,它也会这样做。和他按下的次数一样多。

    -(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{



    UIImageView *subView;    
    CGRect frame = CGRectMake(60, 100, 200, 200);
    subView = [[UIImageView alloc] initWithFrame:frame];



    NSString *mediaType = [info
                           objectForKey:UIImagePickerControllerMediaType];
    [self dismissModalViewControllerAnimated:YES];
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
        UIImage *image = [info 
                          objectForKey:UIImagePickerControllerOriginalImage];


        subView.image = image;
        if (newMedia)
            UIImageWriteToSavedPhotosAlbum(image, 
                                           self,
                                           @selector(image:finishedSavingWithError:contextInfo:),
                                           nil);
    }
    else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
    {
        // Code here to support video if enabled
    }

    [self.view addSubview:subView];  
    amount += 1;

    NSLog(@"%d", amount);
}

我需要给每个子视图一个唯一的名称,例如subView1,subView2,subView3 ....... 以便我以后可以参考。

我如何唯一地识别它们?

4 个答案:

答案 0 :(得分:2)

你不能给他们起名字。您有几个选项可以在以后轻松识别它们。

第一个是子类UIVIew并添加NSString属性来存储名称。然后,您可以遍历父视图的子视图,检查以确保您正在查看的子视图是您的新子类,然后检查它的名称。此方法的主要优点是您的子视图可以包含您想要的任何标识数据。缺点是需要检查类类型等...稍微笨重,但通常编码更好。

另一个选项是使用UIView的标记属性,即NSInteger。您可以为每个子视图提供自己的标记。这个系统有两个优点:它内置于UIView,您可以使用父视图的viewWithTag方法来查找特定的子视图(尽管由于标签在默认情况下不是唯一的,因此存在一定的风险没有什么可以阻止你为多个子视图分配相同的标签。)

答案 1 :(得分:1)

您可以使用标签属性

[subview setTag:999];

...使用viewWithTag

访问子视图
[self.view bringSubviewToFront:[subview viewWithTag:999]];

答案 2 :(得分:1)

每个视图都有一个名为tag的NSInteger属性。

subview.tag = amount;

稍后,当您需要引用特定的子视图时:

referencedSubview = [self.view viewWithTag:x];
if (referencedSubview != nil) {
 //do whatever
} else {
 //No subview with this tag
}

答案 3 :(得分:1)

您可以使用NSMutableDictionary,然后从NSString变量创建amount,例如[NSString stringWithFormat:@"view%d",amount]。然后使用此名称作为视图的键。这保证不会与标签编号发生任何潜在冲突,并且如果需要,还可以让您跟踪视图层次结构中的视图。