2013-12-16 41 views
2

我想更改我的默认视图控制器中的标签的值从一个不同的类。看不到viewcontoller的属性

  • 于是我开始一个简单的“单一视图应用的iOS项目(Xcode5)
  • 这会自动生成一个视图控制器,我(我 明白是根视图控制器)
  • 我现在添加标签在我看来,并将其连接到ViewController(通过IBOutlet中机制)
  • 我在ViewController.h称之为出口“gameStateLabel”,所以它看起来像这样的文件

    @property (weak, nonatomic) IBOutlet UILabel *gameStateLabel; 
    

接下来,我有一个完全独立的类,它具有我的代码的逻辑,并基于逻辑中的条件我想更改UIlabel。

所以我尝试从我的其他类做到这一点:

  • 得到这样的根视图控制器的实例:

    UIViewController * uvc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 
    

我想我现在有一个实例在uvc中的rootviewcontroller的应该能够进入并更改gameStateLabel。

但是:我无法做到这一点uvc.gameStateLabel根本不显示作为属性,即使它明确声明为一个属性,我也为它添加了@synthesize。

任何帮助将不胜感激 - 我一直在这个疯了。 (对于参考,我习惯于在Mac上做类似的事情,我将声明一个标签作为AppDelegate的属性,获取Appdelegate的实例并简单地引用label属性并更改其属性文字]

这里的视图控制器。需要注意的是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

尝试委托功能。 –

+0

您是否试图打印由[[[[[UIApplication sharedApplication]委托]窗口] rootViewController]获得的rootViewController对象?什么是日志打印? –

回答

0

好的。我发现了两个问题。

  1. 我已经从我的Mac项目复制了代码并对其进行了修改。似乎出了什么问题。

我重新输入整个功能和它解决了大部分问题

  1. UVC应类型的视图控制器* - 不是的UIViewController *为我所做的一切

谢谢大家对您的答复 - 非常感谢。

0

做这样的...

YourViewController *rootController =[(YourViewController*)[(YourAppDelegate*) 
     [[UIApplication sharedApplication]delegate] window] rootViewController]; 
+0

是的,我试过这个,但没有运气。我什至不能看到视图控制器的属性 - 即使我创建了一个全新的实例 – farid98

+0

你可以发布代码吗? –

+0

只需在上面的主要问题中发布代码。感谢所有的评论和帮助! – farid98

0

尝试以下操作太:

ViewController *controller = (ViewController*)self.window.rootViewController; 

它将返回主故事板的初始视图控制器。

2

添加#import "mainRootVC.h"在你CustomClass.m文件

,创造对象mainRootVC诸如此类,

mainRootVC *obj = [[mainRootVC alloc] init]; 
// Now you can access your label by 
obj.gameStateLabel... 
+0

是的,我有进口。 #import“ViewController.h”在我的情况下,但它没有帮助。我根本无法看到视图控制器 – farid98

+0

的任何声明的属性检查您的连接与文件的所有者是否正确?并尝试更改@property(强,非原子)而不是一周。 – iPatel

0

对于从的viewController将信息发送到其他的viewController您有:

  • 代表:Definiton and examples
  • NSNotificationCenter:Apple Documentation

    NSString * label = @“label text”;

    [[NSNotificationCenter defaultCenter] postNotificationName:NAVIGATETO object:label userInfo:nil];

你可以找到关于这两个例子的吨。我建议你使用其中之一。

希望这会有所帮助。