【问题标题】:How to release subview in iOS如何在 iOS 中发布子视图
【发布时间】:2013-05-04 17:28:24
【问题描述】:

这是添加子视图的代码,我想在添加子视图之前检查它。

numberOfViews = [[GlobalVariable sharedInstance].itemNewsDetail count];


for (int i = 0; i < numberOfViews; i++) {
    @try{
        CGFloat xOrigin = i * 320;
        CGRect frame;
        frame.size = CGSizeMake(320, 365);
        frame.origin.x = xOrigin;
        frame.origin.y = 0;

        detailVC = [[DetailScrollVC alloc]initWithNibName:@"DetailScrollVC" bundle:nil];
        detailVC.view.frame = frame;
        [detailVC loadViewByIndex:i];

        UIFont *font = detailVC.txtBodyNews.font;
        detailVC.txtBodyNews.font = [font fontWithSize:currentFontSize];
        detailVC.txtBodyNews.tag = i;

        [scrollDetail addSubview:detailVC.view];
        [scrollDetail sizeToFit];
        [detailVC.view release];
    }@catch (NSException *exception) {
        NSLog(@"ERROR HANDLING : %@",exception);
    }
}

如何查看和释放我之前已经添加的所有子视图。

谢谢。

【问题讨论】:

    标签: iphone ios


    【解决方案1】:

    如果您想从滚动视图或任何其他视图中删除子视图,请尝试以下代码:

     numberOfViews = [[GlobalVariable sharedInstance].itemNewsDetail count];
    
     for (UIView *subviewElement in scrollDetail.subviews) 
     {
         [subviewElement removeFromSuperview];
     }
    
     for (int i = 0; i < numberOfViews; i++)
     {
         @try
         {
            CGFloat xOrigin = i * 320;
            CGRect frame;
            frame.size = CGSizeMake(320, 365);
            frame.origin.x = xOrigin;
            frame.origin.y = 0;
    
            detailVC = [[DetailScrollVC alloc]initWithNibName:@"DetailScrollVC" bundle:nil];
            detailVC.view.frame = frame;
            [detailVC loadViewByIndex:i];
    
            UIFont *font = detailVC.txtBodyNews.font;
            detailVC.txtBodyNews.font = [font fontWithSize:currentFontSize];
            detailVC.txtBodyNews.tag = i;
    
            [scrollDetail addSubview:detailVC.view];
            [scrollDetail sizeToFit];
            [detailVC release];
         }
         @catch (NSException *exception) {
            NSLog(@"ERROR HANDLING : %@",exception);
         }
     }
    

    我希望它可以帮助您更好地理解。谢谢

    【讨论】:

    • 感谢您的帮助@chandan.. 但我的应用程序仍然强制关闭另一个错误.. lldb。你怎么看?
    【解决方案2】:

    如果您想从滚动视图或任何其他视图中删除子视图,请尝试以下代码:

    NSArray *viewsToRemove = [yourView subviews];
    
    for (UIView *subviewElement in viewsToRemove) 
    {
        [subviewElement removeFromSuperview];
    }
    

    注意:- yourView 是类似 scrollDetail 或 self.view 等的任何东西。

    我希望它可以帮助您更好地理解。谢谢

    【讨论】:

    • 但是我仍然在这个函数中收到内存警告问题。你觉得@chandan怎么样??
    • 在我的应用程序中,我构建了一个表格视图,在选择操作时,我放置了一个分页 addsubview,就像我给出的代码一样。我认为内存警告问题是当我生成那个 addsubview 时,我只是再次 addsubview 它并替换那个 addSubview。
    • 我已经应用了它,它工作正常。我添加了另一个答案。我已将我的答案与您的代码合并。如果仍有问题,请告诉我。
    • 警告可能是[detailVC.view release];所以改变它[detailVC release];并检查您是否设置了滚动视图的委托。有时它会显示警告。如果仍然会产生问题,而不是将属性分配给您的 scrollDetail 并将其用作 self.scrollDetail。谢谢
    • 我不能像你说的那样改变它,如果我改变为[detailVC release],我的应用程序会出现lldb错误。
    【解决方案3】:

    如果您在 google 上没有找到您的解决方案,请先尝试在 google 上搜索您的问题,在这种情况下您应该发布您的问题。在下面的链接中查看您的答案

    1. How can I loop through all subviews of a UIView, and their subviews and their subviews

    2. How to list out all the subviews in a uiviewcontroller in iOS?

    3. http://iphonedevsdk.com/forum/iphone-sdk-development/5599-removing-all-subviews-from-a-view.html

    【讨论】:

      【解决方案4】:

      试试这样,

      for (UIView *vie in self.view.subviews)
          {
              if([vie isKindOfClass:[UIImage class]])//here place your object class name for removeing that particuler subview from superview.
                  [vie removeFromSuperview];
          }
      

      【讨论】:

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