464637258 2016-03-01 10:34 采纳率: 57.1%
浏览 3971
已采纳

removeFromSuperview 不起作用了,奇怪问题

简单上代码吧。
我在更新UIView时候需要先将其中已经存在的一些移除掉

         if ([NSThread currentThread] == [NSThread mainThread]){
            NSLog(@"before remove:%ld", [[self subviews] count]);
            [Helper removeAllSubViews:self];
            NSLog(@"after remove:%ld", [[self subviews] count]);
        }

Helper removeAllSubViews我就不贴代码了,很简单,获取view的subviews,用foreach遍历然后调用removeFromSuperview而已。
很明显我这里确定了这段代码是主线程运行的,但是这样执行仍然没有效果。假如移除之前是4个subview,移除之后还是4个。然后我发现不断更新过程中subview越来越多(每次累计的,没有清除掉之前的),而且由于之前的没有清空成功,全部叠加一起显示特别乱套。
我还特别的看了下系统的注释代码,并没有什么特殊的说明什么情况会移除失败啊。

  • 写回答

3条回答 默认 最新

  • 464637258 2016-03-01 12:45
    关注

    竟然又是自己解决了问题,纠结了大半天。
    原因很奇葩,是这样的,刚才我想点击进去removeFormSuperView,试试看看苹果关于UIView的注释。然后给我弹出了让我选择是哪一个removeFromSuperview.瞬间反应过来了,因为这个UIView的subviews是一个我自定义类型的UIView,我还在那个View里自己重写了removeFromSuperView.悲剧就这么发生了。我忘记调用super了。怪不得。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算