Iphone UIView子视图不响应更改

Iphone UIView子视图不响应更改,iphone,objective-c,ios,uiview,subview,Iphone,Objective C,Ios,Uiview,Subview,我正在学习如何处理子视图,并且很难操纵其中一个子视图的位置。每个子视图都有一个唯一的标记。值得注意的是,我正在UITableCell中搜索子视图,UITableView大约有5行 如果我这样做: UIView *mike = [self.view viewWithTag:6]; mike.frame = CGRectMake(250, 5, 25, 20); mike.backgroundColor = [UIColor redColor]; NSLog(@"mike=%@ tag=%d",[[

我正在学习如何处理子视图,并且很难操纵其中一个子视图的位置。每个子视图都有一个唯一的标记。值得注意的是,我正在UITableCell中搜索子视图,UITableView大约有5行

如果我这样做:

UIView *mike = [self.view viewWithTag:6];
mike.frame = CGRectMake(250, 5, 25, 20);
mike.backgroundColor = [UIColor redColor];
NSLog(@"mike=%@ tag=%d",[[mike class] description], [mike tag]);
或:

子视图不会改变位置,但是如果我使用下面的代码搜索它,它确实会工作

for (UIView *subview0 in [self.view subviews])
{
  for (UIView *subview1 in [subview0 subviews])
  {
    for (UIView *subview2 in [subview1 subviews])
    {
      if ([[[subview2 class] description] isEqualToString: @"UILabel"]) 
      {
        [subview2 setText:@"mike"];
        subview2.frame = CGRectMake(250, 5, 25, 20);
        subview2.backgroundColor = [UIColor redColor];
      }
    }
   }
 }
非常感谢您的帮助

迈克

编辑:执行时从控制台

2011-03-10 19:53:42.344 mike=UILabel标签=60x4b59610
2011-03-10 19:53:42.344标签=842标签=6 2011-03-10 19:53:42.345 0-subview=PerformAnalysisCustomCell标签=0
2011-03-10 19:53:42.345 1-subview=UIGroupTableViewCellBackground标签=0
2011-03-10 19:53:42.346 2-subview=ui视图标签=0 0x4d62910
2011-03-10 19:53:42.349 1-subview=UITableViewCellContentView标签=0
2011-03-10 19:53:42.349 2-subview=UILabel标签=0 0x4b51320
2011-03-10 19:53:42.350 2-subview=UILabel标签=1 0x4b59290
2011-03-10 19:53:42.350 2-subview=UILabel标签=2 0x4b59370
2011-03-10 19:53:42.358 2-subview=UILabel tag=3 0x4b59410
2011-03-10 19:53:42.359 2-subview=UILabel tag=4 0x4b594b0
2011-03-10 19:53:42.360 2-subview=UILabel标签=5 0x4b59560
2011-03-10 19:53:42.360 2-subview=UILabel tag=60x4b59610


将%p放入NSLog后,可以确定内存地址是否相同。Other tag=6行有不同的地址,所以我希望至少该单元格会移动

我更喜欢将UITableViewCell子类化,这样我就可以通过属性访问我想要的内容。我不喜欢-viewWithTag:,它以前给我带来了问题,使代码难以管理。

您的前两个示例做了完全相同的事情。在这种情况下,静态类型(UIView*vs UILabel*)不会更改编译器生成的代码

第三个示例应该记录它操作的每个视图。可能标签还没有设置好

如果(subview2.tag==6),检查是否有多个视图具有相同的标记(听起来好像有),这也是有意义的


您的日志消息还可以打印视图描述(或仅打印“%p”格式的视图地址),以查看您使用的视图是否相同。

您需要在每个单元格上运行viewWithTag语句,而不是在整个tableView上。这很可能应该在cellForRowAtIndexPath中设置,然后在需要时重新加载更改的行。

self.view是tableView吗?标记是否在所有表格单元格中都是唯一的?您在哪里设置标签标签?是的。每个标记对于单元格都是唯一的,但不是整个表,因为tabel单元格是重复的。我正在IB中设置标签。。。然后只需要在一个单元格上使用标签查看,而不是在整个tableView上。如果在tableView上使用viewWithTag,您将只获得它遇到的标签的第一个实例。谢谢!我在上面添加了一些输出,您可以在其中看到地址,并且至少有一个子视图显示为相同的地址。因此,这应该改变,不是吗?至少有一个子视图具有相同的地址,但它可能不是您看到改变的子视图之一。您最初的断言“每个子视图都有一个唯一的标记”对于您正在调用的视图是错误的-viewWithTag:on(您是在表视图而不是单元格上调用它吗?)。
for (UIView *subview0 in [self.view subviews])
{
  for (UIView *subview1 in [subview0 subviews])
  {
    for (UIView *subview2 in [subview1 subviews])
    {
      if ([[[subview2 class] description] isEqualToString: @"UILabel"]) 
      {
        [subview2 setText:@"mike"];
        subview2.frame = CGRectMake(250, 5, 25, 20);
        subview2.backgroundColor = [UIColor redColor];
      }
    }
   }
 }