看不到viewcontroller的属性

时间:2013-12-16 11:37:14

标签: ios iphone objective-c cocoa

我想从另一个类中更改默认视图控制器中的标签值。

  • 所以我开始一个简单的'单视图应用程序'iOS项目(Xcode5)
  • 这会自动为我生成一个ViewController(我 理解是根视图控制器)
  • 我现在在我的View中添加一个标签并将其连接到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的实例并简单地引用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

}

5 个答案:

答案 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发送信息,您需要:

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

    NSString * label = @“label text”;

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

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

希望这有点帮助。

答案 4 :(得分:0)

行。我发现了两个问题。

  1. 我从我的Mac项目中复制了代码并对其进行了修改。似乎有些事情出了问题。
  2. 我重新输入了整个函数,它解决了大部分问题

    1. uvc应该是ViewController类型* - 而不是UIViewController *就像我在做什么
    2. 感谢大家的回复 - 非常感谢。

相关问题