2010-04-13 66 views
1

我试图以编程方式从另一个NSObject类中更改UIViewController的用户界面。问题是我不确定如何从NSObject类访问UIViewController的视图。因此,例如,在我的NSObject类,我这样说:从另一个类编辑UIViewController

self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
self.view.backgroundColor = [UIColor yellowColor]; 

,但我不断收到错误,说:“请给成员‘视图’的东西不是一个支柱或联合。”有什么我需要让我的NSObject类看到我的UIViewController

+0

“自我”总是指当前对象。在你的情况下,在一些没有名为“view”的随机对象中说“self.view”会导致这个错误。你可以说viewController.view,如果你有一个viewController引用方便,这听起来像是你需要的。 – 2010-04-13 06:15:13

+0

我将如何引用viewController? – Guy 2010-04-13 06:27:55

回答

0

您不能访问这样的...你需要以某种方式通过UIViewController的观点在NSObject类...

1

每当你说的方法,“自我”,它指的是什么对象拥有这种方法。所以当你说self.view时,你确实需要NSObject的视图(不用说,不用说,除非你已经专门将NSObject分类为具有“视图”属性。)

你应该做的是。给NSObject类的属性称为myController或东西在它的接口声明,或传递ViewController*给需要访问它的任何方法

的财产,你可以说:

ViewController* myController; 

在NSObject的子类的接口声明,或者为方法的方式,添加一个你的NSObject子类的方法'的方法:

- (void) someMethodThatTakesAViewController: (ViewController*) theViewController { 
    //Do your stuff here 
    theViewController.view = [[UIView alloc] init]; // Or whatever you want to do 
} 

希望这就是你要找的。

1

在对于被试图改变视图的对象的标题文件,添加@class <YOURVIEWCONTROLLER>;,然后在@interface部分,添加<YOURVIEWCONTROLLER> *viewController;然后外@interface添加@property (nonatomic, retain) <YOURVIEWCONTROLLER> *viewController;。然后在主文件中添加@synthesize viewController;#import "<YOURVIEWCONTROLLER.h"。然后,要更改背景颜色,请使用viewController.view.backgroundColor = [UIColor <COLOUR>];

如:

Test.h:

#import <UIKit/UIKit.h> 

@class Test2ViewController; 

@interface Test : UIViewController { 
    Test2ViewController *viewController; 
} 

@property (nonatomic, retain) Test2ViewController *viewController; 

Test.m:

#import "Test.h" 
#import "Test2ViewController.h" 

@implementation Test 

@synthesize viewController; 

... 

viewController.view.backgroundColor = [UIColor yellowColor]; 

... 

希望这有助于

编辑:请确保调用[viewController release]在你的dealloc,否则你将有一个漏管;)

0

您可以强制转换您的ID来UIViewcontroller,像

[((UIViewController *)yourID).view addSubview:yourView.view]; 
+0

为了提高答案的质量,请包括您的帖子如何/为什么会解决问题。 – 2012-10-06 03:43:02