我有一个奇怪的问题。我有一个标签栏应用程序。当我想用任何方法设置UILabel的文本时,什么也没发生。
例如,当我调用此方法时,'label1'没有任何反应:
-(void)setOne:(NSMutableArray *)theArray {
label1 = [[UILabel alloc] init];
label1.text = @"Test";
}
有没有人能解决这个问题?
谢谢,
耶勒
答案 0 :(得分:2)
当您调用此方法时,会创建一个新标签,并且之前与此ivar关联的标签的连接将丢失。这也可能是内存泄漏。
编辑:
根据代码的其余部分,这可能有效:
-(void)setOne:(NSMutableArray *)theArray {
label1.text = @"Test";
}
答案 1 :(得分:1)
您没有看到任何事情,因为您创建了标签的新实例,并且不将其添加到任何位置。如果你真的想在你的视图中添加新标签,那么用适当的框架创建它并实际将它添加到某个视图中,例如。
-(void)setOne:(NSMutableArray *)theArray {
label1 = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 200.0f, 30.0f)];
label1.text = @"Test";
[self.view addSubview: label1];
// And do not forget to release your label!
[label1 release];
}
如果要更改已存在的标签文本,请不要在方法中创建新实例,只需为其设置新文本:
-(void)setOne:(NSMutableArray *)theArray {
// if label1 already exists we don't need to create a new one
label1.text = @"Test";
}
修改(来自评论中的更多信息)
创建视图控制器时,它可能不会立即加载其视图,因此在您的代码中
FirstViewController *FVC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[FVC setOne:[resultaten objectAtIndex:indexPath.row]];
当你调用setOne方法时,fvc的视图可能仍然没有被加载,并且该方法中的label1仍然是nil。您可以解决强制控制器的视图加载,以下应该工作:
FirstViewController *FVC = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
FVC.view;
[FVC setOne:[resultaten objectAtIndex:indexPath.row]];
但总的来说,我建议将您的值存储在某个独立于UI(即模型)的类中,或者至少存储在控制器的单独变量中,并仅在实际加载或显示在屏幕上时将其设置为UI元素(在viewDidLoad或viewWillAppear方法中)
答案 2 :(得分:0)
- (void)viewDidLoad
{
[super viewDidLoad];
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 22)];
lbl.text =@"Hello";
[self.view addSubview:lbl];
}