Objective c 目标C:UILabel“;";在我看来
我正在开发一个选项卡式应用程序,它(除其他外)创建了一个简单的Facebook提要。Facebook部分是一个Objective c 目标C:UILabel“;";在我看来,objective-c,ios,Objective C,Ios,我正在开发一个选项卡式应用程序,它(除其他外)创建了一个简单的Facebook提要。Facebook部分是一个UINavigationController,包含一个主表视图和一个详细视图。当我单击主表视图中的一行时,它会按预期显示详细视图(以及适当填充的标签)。但是,如果返回主视图并选择另一行,则会发生一些奇怪的情况。如果“detailLab”标签(即sizeToFit'd)在详图视图的第一次出现时长四行,而“detailLab”标签在详图视图的第二次出现时长两行,则在详图视图的第二次出现时,“
UINavigationController
,包含一个主表视图和一个详细视图。当我单击主表视图中的一行时,它会按预期显示详细视图(以及适当填充的标签)。但是,如果返回主视图并选择另一行,则会发生一些奇怪的情况。如果“detailLab”标签(即sizeToFit
'd)在详图视图的第一次出现时长四行,而“detailLab”标签在详图视图的第二次出现时长两行,则在详图视图的第二次出现时,“detailLab”将正确显示前两行,但在它们下面是详图视图第一次出现时的最后两行
以及一些(希望如此)相关代码:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
CGRect labelFrame = CGRectMake(100, 40, 220, 150);
detailLab = [[UILabel alloc] initWithFrame:labelFrame];
[detailLab setTextColor:[UIColor darkGrayColor]];
detailLab.font = [UIFont systemFontOfSize:14];
[detailLab setText:detail];
[detailLab setNumberOfLines:0];
[detailLab sizeToFit];
[self.view addSubview:detailLab];
NSURL *url = [NSURL URLWithString:pictureString];
NSData *imageData = [[NSData alloc] initWithContentsOfURL:url];
picture = [UIImage imageWithData:imageData];
bigImage.image = picture;
NSLog(@"dateString: %@", dateString);
dateLabel.text = dateString;
}
- (void)viewDidUnload
{
[super viewDidUnload];
bigImage = nil;
detailLab = nil;
detailLab.hidden = YES;
// Release any retained subviews of the main view.
self.detailDescriptionLabel = nil;
}
如果您需要任何其他代码或详细信息,请询问;我很乐意提供。问题是,每次调用
视图时,您都会创建一个新标签,我想,在视图中删除它将消失。所以标签是叠起来的,一个在另一个上面
请记住,您可能会收到这样的呼叫(忽略不相关的呼叫):
从主视图到详细视图,这是正常的-令人沮丧,但很正常。当我遇到问题时,我找到的解决方案是在每个-viewdiload的顶部重置标签
一个选项是在viewDidUnload中删除它。另一种方法是每次重置标签,使用一段代码,如下面的代码,位于代码实际加载到内容的部分上方
detailLab=[NSString stringWithFormat:@''
问题在于,设置大多数主视图/局部视图时,实际上并不是每次添加视图时都创建新的局部视图,而是在“主视图”区域中创建指向同一视图的另一个链接。这很好,但您只需要记住使用ViewDidLoad
希望它有帮助我没有意识到我必须在视图中删除它,它将消失
。我认为在viewDidUnload
中将标签设置为nil会起到类似的作用。无论如何,谢谢你的帮助!我会尽快接受这个答案(大约三分钟后)。我编辑了我的答案,让它更清楚(我希望!)为什么会发生这种情况。(看看电话的顺序)啊,我现在肯定更清楚了。我真的很感谢你添加的细节,它们让我们更容易理解。
viewDidLoad
viewWillAppear
viewWillDisappear
viewWillAppear <- Whoops! Two labels
viweWillDisappear
viewDidUnload
- (void)viewDidLoad
{
[super viewDidLoad];
detailLab = [[UILabel alloc] initWithFrame:CGRectZero];
[detailLab setTextColor:[UIColor darkGrayColor]];
detailLab.font = [UIFont systemFontOfSize:14];
[self.view addSubview:detailLab];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
CGRect labelFrame = CGRectMake(100, 40, 220, 150);
[detailLab setFrame:labelFrame];
[detailLab setText:detail];
[detailLab setNumberOfLines:0];
[detailLab sizeToFit];
NSURL *url = [NSURL URLWithString:pictureString];
NSData *imageData = [[NSData alloc] initWithContentsOfURL:url];
picture = [UIImage imageWithData:imageData];
bigImage.image = picture;
NSLog(@"dateString: %@", dateString);
dateLabel.text = dateString;
}
- (void)viewDidUnload
{
[super viewDidUnload];
bigImage = nil;
detailLab = nil;
detailLab.hidden = YES;
// Release any retained subviews of the main view.
self.detailDescriptionLabel = nil;
}