【问题标题】:Find iOS UIView by tag dynamically通过标签动态查找iOS UIView
【发布时间】:2013-12-23 11:09:19
【问题描述】:

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

我有一个滚动视图,可以在其中动态创建其他视图和子视图,代码如下:

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。这是什么?

希望我自己解释一下。

【问题讨论】:

    标签: ios iphone uiview tags


    【解决方案1】:

    您好,图片下移的唯一原因是您没有分配正确的标签,请为 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”

    【讨论】:

    • 在不纠正代码和错误的情况下对这个东西进行排序太难了。
    【解决方案2】:

    在再次加载滚动视图之前尝试删除所有添加到滚动视图的视图 在for循环上面写下这一行

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2020-07-30
      • 1970-01-01
      相关资源
      最近更新 更多