在 AppDelegate.m 上设置 label.text

Posted

技术标签:

【中文标题】在 AppDelegate.m 上设置 label.text【英文标题】:Set label.text over AppDelegate.m 【发布时间】:2012-05-07 10:28:03 【问题描述】:

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

我已尝试使用此代码,但没有成功:

- (void)applicationWillEnterForeground:(UIApplication *)application

    HomeViewController *home = [[HomeViewController alloc] init];
    home.dateCreatedLabel.text = @"date createdddd";

我必须将其放入 AppDelegate 的原因是因为我从网站获取 JSON,我也必须在 applicationWillEnterForeground: 中执行此操作以检查每次更新,我解决了更新核心数据但没有如何更改标签的问题。文本。

或者我能不能强制HomeViewController刷新?

【问题讨论】:

不需要,因为它是自我解释的 我无法想象从 AppDelegate 设置标签的原因。你能详细说明你为什么这样做吗? 【参考方案1】:

首先,针对其他一些答案,将公共界面中的某些 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 中设置。

【讨论】:

【参考方案2】:

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

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

在viewController初始化的时候在这个方法中赋值。

【讨论】:

以上是关于在 AppDelegate.m 上设置 label.text的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 AppDelegate 上设置多个本地通知?

仅为 AppDelegate.m iOS 中的首次启动设置特定方向

appdelegate.m 中的 UIAlertView 不起作用

从 appdelegate 设置 UIViewController 委托

用于 Flutter iOS Swift 设置的谷歌地图

AppDelegate.swift 如何在 Xcode 6.3 中替换 AppDelegate.h 和 AppDelegate.m