我想从另一个类中更改默认视图控制器中的标签值。
我将此出口称为“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的实例并简单地引用label属性并更改其文本]
这是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
}
答案 0 :(得分:2)
在#import "mainRootVC.h"
档案
CustomClass.m
创建 mainRootVC 的对象,例如
mainRootVC *obj = [[mainRootVC alloc] init];
// Now you can access your label by
obj.gameStateLabel...
答案 1 :(得分:0)
这样做......
YourViewController *rootController =[(YourViewController*)[(YourAppDelegate*)
[[UIApplication sharedApplication]delegate] window] rootViewController];
答案 2 :(得分:0)
请尝试以下方法:
ViewController *controller = (ViewController*)self.window.rootViewController;
它将返回主故事板的初始视图控制器。
答案 3 :(得分:0)
要从viewController向其他viewController发送信息,您需要:
NSNotificationCenter:Apple Documentation
NSString * label = @“label text”;
[[NSNotificationCenter defaultCenter] postNotificationName:NAVIGATETO object:label userInfo:nil];
你可以找到关于这两个的大量例子。我建议你使用其中一种。
希望这有点帮助。
答案 4 :(得分:0)
行。我发现了两个问题。
我重新输入了整个函数,它解决了大部分问题
感谢大家的回复 - 非常感谢。