2010-04-13 38 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

相關問題