English 中文(简体)
如何正确地丢弃子视图?
原标题:How do i properly discard a subview?

我的应用程序有一个问题,它的代码太长,无法进入,但当我删除UIView并用新的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,这是应该的。

所以我的猜测是,它并没有正确删除图标。有没有一种方法可以完全删除图标,或者是尽我所能从Superview中删除。我所能做的只是将其设置为alpha=0,但这更像是一个补丁式的解决方案,而不是我想要的解决方案。

最佳回答

"Is there a way to completely remove icon, or is removeFromSuperview as far as i can go"

您可以将对象设置为nil:

icon = nil;
问题回答

Can you verify what "self" is in this line of code: It might not be what you think.

  [self addSubview:icon2];
  NSLog(@" Self is %@", self);

这只是猜测,但请尝试将self.tag设置为-1或其他与您在Icon对象上设置的标签不冲突的值。viewWithTag:方法在当前视图及其子视图中搜索匹配项,因此如果self-tag=0并调用[self-viewWithTag:0],则会得到self-

在此之前,您是否保留了图标?如果没有,则无需在调用removeFromSuperview之后释放它。类似地,除非您在其他地方需要对icon2的引用,否则您可以在调用addSubview后释放它。

视图保留通过addSubview添加的视图,并释放通过removeFromSuperview删除的视图。





相关问题
Code sign Error

I have created a new iPhone application.I have two mach machines. I have created the certificate for running application in iPhone in one mac. Can I use the other mac for running the application in ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

将音频Clips从Peter改为服务器

我不禁要问,那里是否有任何实例表明从Peit向服务器发送音响。 I m不关心电话或SIP风格的解决办法,只是一个简单的袖珍流程......

• 如何将搜查线重新定位?

我正试图把图像放在搜索条左边。 但是,问题始于这里,搜索条线不能重新布署。

热门标签