在 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.m iOS 中的首次启动设置特定方向
appdelegate.m 中的 UIAlertView 不起作用
从 appdelegate 设置 UIViewController 委托
AppDelegate.swift 如何在 Xcode 6.3 中替换 AppDelegate.h 和 AppDelegate.m