【发布时间】:2013-12-16 11:37:13
【问题描述】:
我想从不同的类更改默认视图控制器中标签的值。
- 所以我开始了一个简单的“单一视图应用程序”iOS 项目 (Xcode5)
- 这会自动为我生成一个 ViewController(我 理解是根视图控制器)
- 我现在在我的视图中添加一个标签并将其连接到 ViewController(通过 IBOutlet 机制)
-
我将此插座称为“gameStateLabel”,所以它在 ViewController.h 文件中看起来像这样
@property (weak, nonatomic) IBOutlet UILabel *gameStateLabel;
接下来,我有一个完全独立的类,它包含我的代码逻辑,并且基于逻辑中的条件我想更改 UIlabel。
所以我尝试在我的其他班级这样做:
-
像这样获取根视图控制器的实例:
UIViewController * uvc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
我想我现在在 uvc 中有一个 rootviewcontroller 实例,应该能够访问并更改 gameStateLabel。
但是:我不能这样做 uvc.gameStateLabel 根本不会显示为属性,即使它被明确声明为属性并且我也为它添加了@synthesize。
任何帮助都将不胜感激 - 我已经为此发疯了。
(参考。我习惯在 Mac 端做类似的事情,我将标签声明为 AppDelegate 的属性,获取 Appdelegate 的实例并简单地引用标签属性并更改其文本]
这里是 ViewController。请注意,gameStateLable 是一个属性
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *gameStateLabel;
@end
@implementation ViewController
@synthesize gameStateLabel;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
这是我的类 cls1(继承自 NSObject)
#import "cls1.h"
#import "ViewController.h"
@implementation cls1
-(void) dummy{
UIViewController * uvc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
// uvc does NOT show gameStateLabel in intellisense, i.e. uvc.gameStateLabel does NOT work
}
【问题讨论】:
-
尝试委托函数。
-
您是否尝试打印您通过
[[[[UIApplication sharedApplication] delegate] window] rootViewController]获得的rootViewController 对象?日志中的打印内容是什么?
标签: ios iphone objective-c cocoa