通过标签动态查找iOS UIView

时间:2013-12-23 11:09:19

标签: ios iphone uiview tags

我正在为iPhone开发应用程序,我有一个奇怪的问题。我试图自己解决这个问题但是3天之后我还没有找到解决办法。

我有一个scrollview,我在其中动态创建其他视图和子视图,这是代码:

for (int i=0; i<dim; i++) {

    UITextView *posted_nick= [[UITextView alloc] initWithFrame:CGRectMake(paddWidth, heightUpdateImageScrollview+paddHeight/2, screenWidth-2*paddWidth, 37)];
    //textview customization...
    [imagesScrollView addSubview:posted_nick];

    row_images_like = [[UIView alloc] initWithFrame:CGRectMake(paddWidth,heightUpdateImageScrollview+paddHeight+37+heightImageInScrollView,screenWidth-2*paddWidth,80)];
    //set the tag = id
    row_images_like.tag = [id_image intValue];

        UIImageView *like_mini = [[UIImageView alloc] initWithFrame:CGRectMake(0,15,25,25)];
        //imageview customization...
        //tag = id+1..
        NSInteger x = [id_image intValue] + 1;
        number_like.tag = x;
        [row_images_like addSubview:like_mini];

        UITextView *number_like = [[UITextView alloc] initWithFrame:CGRectMake(paddWidth*5/2,10,55,37)];
        //textview customization...
        //tag = id+2..
        NSInteger x = [id_image intValue] + 2;
        number_like.tag = x;
        [row_images_like addSubview:number_like];

    [imagesScrollView addSubview:row_images_like];
}

现在,一切都很棒,当我点击图片视图“like_mini”时,我可以找到同一行中带有相应标签的其他视图

(UIView *thisView = (UIView*)[imagesScrollView viewWithTag:ID_IMAGE];)

问题是我更新我的滚动视图。当用户滚动到顶部时,如果要显示新图像,我调用创建视图的相同功能,并且所有其他视图(已经存在)被移动一些。为什么当我尝试在我的滚动视图中按标签查找视图时,一切都在第一次工作,但不适用于使用相同代码创建的新图像?

如果我删除了滚动视图中的所有视图,则在添加新视图之前,它可以正常工作。但我不想删除最旧的视图。

当它工作时,我在我的控制台中有带标记的视图(row_images_like)。 当它不起作用时,我收到一个_UITextContainerView。这是什么?

希望我自己解释一下。

2 个答案:

答案 0 :(得分:2)

您好,图片向下移动的唯一原因是您没有指定正确的标记,请为uiview,uiimageview和uitextview提供适当的标记值。

row_images_like.tag = [id_image intValue] + 1000;

对于获取视图,请按照与之前相同的方式完成,只需添加数千个。

UIView *thisView = (UIView*)[imagesScrollView viewWithTag:ID_IMAGE+1000];

还有一个错误:

number_like.tag = x;

上面的行对象如“Number_like”如何在初始化之前出现并将其他对象的标记值更改为“+2000”和“+3000”

答案 1 :(得分:1)

尝试删除添加到scrollview的所有视图,然后再次加载scrollview 将此行写在上面以进行循环

 for (UIView *v in [imagesScrollView subviews])
{
    [v removeFromSuperview];
    v = nil;
}