【问题标题】:iPhone: How to remove all objects from a UIScrollViewiPhone:如何从 UIScrollView 中删除所有对象
【发布时间】:2010-07-12 19:05:21
【问题描述】:

基本上我想从 UIScrollView 中删除所有对象,但我还没有找到解决方案,因为简单的“removeAllObjects”命令不起作用。有人知道怎么做吗?

【问题讨论】:

  • 不要删除UISubview 的所有子视图。它的滚动指示器视图是子视图。你也将删除这些。我建议将您的内容视图放在您自己的容器 UIView 中。 (将其保留为 ivar,以便在添加和删除时轻松访问)

标签: iphone uiscrollview subview


【解决方案1】:

更简单:

[[scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

【讨论】:

  • 我猜你和makeObjectsPerformSelector 有同样的问题,因为它在同时修改数组的同时循环遍历子视图。这种方式很优雅,很多人都在使用,但是你如何解决上面提到的 progrmr 呢?
  • 我很确定 makeObjectsPerformSelector: 在调用每个对象的选择器之前生成一个临时数组。如果没有,正如你所说,它会导致问题。
【解决方案2】:

最简单的方法:

for(UIView *subview in [scrollView subviews]) {

    [subview removeFromSuperview];

}

【讨论】:

  • 在遍历元素时修改数组内容是否安全?我只是想知道...
  • 一般来说,这可能不是最佳实践,因此您可能需要设置一个标记为删除的临时数组。 :P
  • 在枚举父子视图集合的同时删除子视图绝对安全
【解决方案3】:

在不移除滚动条的情况下,有两种解决方案:

为所有子视图添加标签,使用这些标签将其删除。

实施:

把它放在你的班级上方

#define XPScrollViewSubviewStartTag             100

添加对象时

for(NSInteger = 0;i<[viewArray count];i++){
     UIView* view = [viewArray objectAtIndex:i];
     view.tag = XPScrollViewSubviewStartTag + i;
     [scrollView addSubview:view];
}

当你以后想删除视图时使用

for(UIView* view in [scrollView subviews]){
      if(view.tag >= XPScrollViewSubviewStartTag)
           [view removeFromSuperview];
}

创建自定义 UIView 类

当您想要删除视图时

for(id view in [scrollView subviews]){
      if(![view isKindOfClass:[CustomView class]])
            continue;

      //not necessary, but just to make things understandable
      CustomView* customView = (CustomView*)view;
      [customView removeFromSuperview];
}

【讨论】:

    【解决方案4】:

    Oritm 的解决方案很不错,但是如果您不想费心使用标签,您可以手动从滚动视图中删除要删除的视图。这将假定您知道要删除哪个视图。例如,我的滚动视图只有 UILabels,所以当我运行以下命令时:

    // This will remove the scrollview but the scrollbars will remain 
    for (UIView *subview in [self.detailsExpander.scrollView subviews]) {
        if ([NSStringFromClass([subview class]) isEqualToString:@"UILabel"])
            [subview removeFromSuperview];
    }
    

    这只会删除所有标签,但会保留滚动条(即图像视图)。注意:如果您想保留特定的图像视图同时又想保留滚动条,这将不起作用。

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多