2010-04-13 4 views
1

Я пытаюсь программно изменить пользовательский интерфейс UIViewController от другого класса NSObject. Проблема в том, что я не уверен, как получить доступ к представлению UIViewController из класса NSObject. Так, например, в моем NSObject классе, я говорю что-то вроде:Редактирование UIViewController из другого класса

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

, но я получаю ошибки, говоря «Запрос члена„вид“в чем-то не распорки или союза.» Есть ли что-то, что мне нужно, чтобы мой класс NSObject увидел мой UIViewController?

+0

«я» всегда относится к текущему объекту. В вашем случае, говоря «self.view» в некотором случайном объекте, который не имеет свойства, называемого «view», вызывается эта ошибка. Вы можете сказать, что viewController.view, если у вас есть ссылка viewController, которая звучит так, вам нужно. –

+0

Как бы я ссылался на viewController? – Guy

ответ

0

вы не можете получить доступ, как это ... вам нужно как-то передать представление UIViewController в классе NSObject ...

1

Всякий раз, когда вы говорите «Я» в методе, он относится к какой-либо объект принадлежит этот метод , Поэтому, когда вы говорите self.view, вы действительно запрашиваете представление NSObject (что, само собой разумеется, не существует, если только вы специально не подклассифицировали NSObject, чтобы иметь свойство «view».

Что вам нужно сделать . дать классу 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]; 

... 

Надеется, что это помогает

Edit: Убедитесь, что для вызова [viewController release] в вашем dealloc, в противном случае у вас будет просачиваемая труба;)

0

Вы можете типаж свой идентификатор в UIViewcontroller, как

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

Чтобы улучшить качество ответа, пожалуйста, укажите, как/почему ваше сообщение решит проблему. –

Смежные вопросы