在UITableView-iOS4中单击行时,如何在加载新详细信息视图时清除以前的视图

在UITableView-iOS4中单击行时,如何在加载新详细信息视图时清除以前的视图,ios4,Ios4,单击表视图中的一行时,我需要显示具有多个标签的详细视图控制器。我显示的标签是基于内容的动态高度,内容是从iPhone的内部日历中读取的。我已经能够基于选择了表视图中的哪一行来实现细节视图的加载。我的问题是,单击新行时,上一个详图视图不会被清除。特别是当我的上一个局部视图有较长的标签,而新的局部视图有较短的标签时,我可以在新标签下面看到上一个标签的内容。在使用新行数据重新加载整个详图视图控制器之前,如何清除该控制器。以下是我正在使用的代码: RootViewController.m MtgDeta

单击表视图中的一行时,我需要显示具有多个标签的详细视图控制器。我显示的标签是基于内容的动态高度,内容是从iPhone的内部日历中读取的。我已经能够基于选择了表视图中的哪一行来实现细节视图的加载。我的问题是,单击新行时,上一个详图视图不会被清除。特别是当我的上一个局部视图有较长的标签,而新的局部视图有较短的标签时,我可以在新标签下面看到上一个标签的内容。在使用新行数据重新加载整个详图视图控制器之前,如何清除该控制器。以下是我正在使用的代码:

RootViewController.m

MtgDetailController.m这是详细视图控制器


每次ViewDidDisplay:执行时,都会将OHAttributedLabel的三个新实例添加到详图视图中。您永远不会删除这些视图。您需要将对它们的引用lblTitle、lblDescription和lblLocation保存在MtgDetailController中,并在下次ViewDidDisplay:执行时删除或重用它们

向MtgDetailController添加三个属性:

别忘了也“合成”它们

在ViewDidDisplay:的顶部,从其超级视图中删除标签:

- (void)viewDidAppear:(BOOL)animated {
    [self.lblTitle removeFromSuperview];
    [self.lblDescription removeFromSuperview];
    [self.lblLocation removeFromSuperview];
    ...
在ViewDidDisplay:的底部,将新创建的标签保存在属性中:

self.lblTitle = lblTitle;
self.lblLocation = lblLocation;
self.lblDescription = lblDescription;

嗨,罗布,我打电话给[lblTitle release];[分配释放];[LBL说明发布]。Dosent每次调用ViewDidDisplay:时都删除这些视图。如果没有,您可以插入一段关于如何删除这些视图的代码片段,以便每次执行viewdide:is[lblTitle release]时我都能从头开始,而不会从其superview中删除视图。您需要执行[lbltile removeFromSuperview],如果我调用[lbltile removeFromSuperview];我在详细视图中看不到所有标签。在发布声明之前,我正在给removeFromSuperview打电话。有没有其他地方我需要称之为此,以便标签第一次出现,但在单击第二行时被清除?
@property (retain) UILabel *lblTitle;
@property (retain) UILabel *lblDescription;
@property (retain) UILabel *lblLocation;
- (void)viewDidAppear:(BOOL)animated {
    [self.lblTitle removeFromSuperview];
    [self.lblDescription removeFromSuperview];
    [self.lblLocation removeFromSuperview];
    ...
self.lblTitle = lblTitle;
self.lblLocation = lblLocation;
self.lblDescription = lblDescription;