1

我有ViewController并且由于某些原因我必须从 AppDelegate.m 设置 label.text 我该怎么做?

我试过这段代码但没有成功:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    HomeViewController *home = [[HomeViewController alloc] init];
    home.dateCreatedLabel.text = @"date createdddd";
}

我必须把它放在 AppDelegate 中的原因是因为我从网站获取 JSON,我必须这样做applicationWillEnterForeground:以检查每次更新,我解决了更新核心数据但没有如何更改 label.text 的问题。

或者我可以如何强制HomeViewController刷新?

4

2 回答 2

2

首先,针对其他一些答案,将公共界面中的某些 UI 组件暴露给您的视图或视图控制器实际上并不是一个糟糕的主意。

例如,Apple 通过直接公开标签和视图开始使用表格视图单元格来执行此操作,因为它对开发人员来说更容易和更灵活。所以他们现在有一个属性,textLabel而以前他们只有一个setText:方法。这意味着您现在可以设置标签文本,以及自定义标签本身所需的任何其他内容。

在您的情况下,您可以将标签公开为视图控制器上的标准属性,然后从应用程序委托访问它。但在访问它之前,您需要确保视图控制器的视图已加载,否则标签属性将返回 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.

于 2012-05-07T10:56:36.517 回答
-1

只需在 viewController 的 .h 文件和 appdelegate.m 中为此创建一个属性

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

在 viewController 初始化时在这个方法中分配属性。

于 2012-05-07T10:34:51.183 回答