最近我开始使用storyboard,我遇到以下情况:我想从AppDelegate设置UILabel的文本。所以我创建了一个ViewController的实例
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle: nil];
ViewController *controller = (ViewController*)[mainStoryboard
instantiateViewControllerWithIdentifier: @"mainViewController"];
myViewController = controller;
[window addSubview:myViewController.view];
[window makeKeyAndVisible];
并从委托中调用以下方法
- (void) updateParameterLabel:(NSString *)parameter {
NSLog(@"URL-2: %@", parameter);
parameterLabel.text = parameter;
}
但该参数未在UI中显示。
另一种想法,这是一种策略:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"View did Appear");
}
“查看确实显示”会被记录两次......
任何提示?
此致 的Sascha
答案 0 :(得分:2)
从应用程序委托中设置UILabel
的文本并不是一个很好的设计。您的视图控制器应该管理您的视图内容,因此他们的名称。通常情况下,您的故事板会自动实例化,并且您不需要任何storyboardWithName
代码,假设您正在使用Apple的默认模板。
也许考虑重新构建您的应用程序以更严格地遵循'模型 - 视图 - 控制器'模式,并考虑Apple如何自动实例化故事板(只需在XCode中创建一个新的故事板项目来查看)。
答案 1 :(得分:0)
如果您仍希望将其设为有效,请将UILabel
设为viewcontroller
的属性并使用
代表:
- (void) updateParameterLabel:(NSString *)parameter {
NSLog(@"URL-2: %@", parameter);
[myViewController updateParemeter:parameter];
}
在myViewController中:
- (void) updateParameterLabel:(NSString *)parameter {
NSLog(@"URL-2: %@", parameter);
parameterLabel.text = parameter;
[self.view setNeedsDisplay];//edit
}
因此,请使用viewController
更新您的标签。当然,您需要property
viewController
标签
答案 2 :(得分:0)
我看到你试图在标签出现之前更新标签,那你为什么不尝试在viewWillAppear中调用你的updateLabel方法,它会是这样的
-(void)viewWillAppear:(BOOL)animated{
[self updateParameterLabel:@"Some Text"];
[super viewWillAppear:YES];
}
updateParameterLabel必须在viewController中实现。