我的应用程序存在问题,其中的代码太长而无法进入,但足以说明我何时删除UIView并将其替换为新的类似:
NSLog(@" .. %@", (Icon *)[self viewWithTag:index]);
Icon *icon = (Icon *)[self viewWithTag:index];
CGRect frame = icon.frame;
int tag = icon.tag;
[icon removeFromSuperview];
[icon release];
Icon *icon2 = [[Icon alloc] init];
icon2.frame = frame;
[icon2 makeIconStandardWithTag:(int)tag];
[self addSubview:icon2];
NSLog第一次(因为视图已经存在)显示该对象是一个图标,但是第二次运行此代码后显示它现在是某个原因的UIImageView,它确实有些奇怪。显示我认为是屏幕上某个奇怪位置的原始图标。这是非常不稳定的行为。但我所知道的是:
删除[icon removeFromSuperview];虽然保持对象在那里,但是停止了这种行为并导致NSLog返回一个Icon,就像它应该的那样。
所以我的猜测是它没有正确删除图标。有没有办法完全删除图标,或者就像我可以去的removeFromSuperview。我能做的就是将它设置为alpha = 0,但这更像是一个补丁解决方案,而不是我想要解决的方法。
答案 0 :(得分:1)
“有没有办法彻底删除 图标,或者目前是removeFromSuperview 我可以去“
您可以将对象设置为nil:
icon = nil;
答案 1 :(得分:1)
你可以验证这行代码中的“self”: 它可能不是你的想法。
[self addSubview:icon2];
NSLog(@" Self is %@", self);
答案 2 :(得分:0)
这是猜测,但请尝试将self.tag
设置为-1或其他一些不会与您在Icon
对象上设置的标记发生冲突的值。 viewWithTag:
方法会在当前视图及其子视图中搜索匹配项,因此,如果self.tag == 0
并且您致电[self viewWithTag:0]
,则会获得self
。
答案 3 :(得分:0)
你之前在某处保留了图标吗?如果没有,则在调用removeFromSuperview后无需释放它。同样,除非你需要在其他地方引用icon2,否则你可以在调用addSubview之后释放它。
视图保留通过addSubview添加的视图,并释放通过removeFromSuperview删除的视图。