我有ViewController
,由于某些原因,我必须从AppDelegate.m设置label.text
我怎么能这样做?
我尝试过这段代码,但没有成功:
- (void)applicationWillEnterForeground:(UIApplication *)application
{
HomeViewController *home = [[HomeViewController alloc] init];
home.dateCreatedLabel.text = @"date createdddd";
}
我必须把它放在AppDelegate中的原因是因为我从网站获取JSON并且我必须在applicationWillEnterForeground:
中执行此操作以检查每次更新并且我解决了更新Core Data但没有如何更改label.text。
或者我可以强迫HomeViewController
如何刷新?
答案 0 :(得分:2)
首先,为了回应其他一些答案,将公共界面中的某些UI组件暴露给您的视图或视图控制器实际上并不是一个糟糕的主意。
例如,Apple通过直接公开标签和视图开始使用表格视图单元格,因为它对开发人员来说更简单,更灵活。因此,他们现在拥有textLabel
的属性,而之前他们只有setText:
方法。这意味着您现在可以设置标签文本,并在标签上自定义您需要的任何其他东西。
在您的情况下,您可以将标签公开为视图控制器上的标准属性,然后从应用程序委托中访问该标签。但在访问它之前,您需要确保已加载视图控制器的视图,否则label属性将返回nil。您只需查询控制器上的-view
方法即可强制加载视图:
// force view to load
[viewController view];
// and now access the label
viewController.label.text = @"whatever";
如果您需要弄清楚如何从应用程序委托获取视图控制器的引用/指针,您应该能够深入了解根视图控制器上的属性,或者使用委派,以便应用程序委托可以实现委托接口以提供标签的文本。
修改强>
为了响应您使用示例代码进行的更新,在访问标签之前,您确实需要执行此操作:
// force view to load
[home view];
home.dateCreatedLabel.text = @"date createdddd";
但有一句警告:如果您的视图控制器因内存警告而被卸载,则之前设置的文本将会丢失。
最好使用NSDate
属性在视图控制器上设置日期,并让视图控制器在属性更改时设置标签的文本,并在-viewDidLoad
中设置。
答案 1 :(得分:-1)
在viewController的.h文件和appdelegate.m中为它创建一个属性
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
在此方法初始化时,viewController分配属性。