在AppDelegate.m上设置label.text

时间:2012-05-07 10:28:04

标签: ios uiviewcontroller uiapplicationdelegate

我有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如何刷新?

2 个答案:

答案 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分配属性。