Редактирование UIViewController из другого класса - PullRequest
1 голос
/ 13 апреля 2010

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

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

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

Ответы [ 4 ]

1 голос
/ 13 апреля 2010

Всякий раз, когда вы говорите «я» в методе, оно относится к тому объекту, которому принадлежит этот метод. Поэтому, когда вы говорите 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 голос
/ 13 апреля 2010

В файле заголовка для объекта, который пытается изменить представление, добавьте @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] в ваш диллок, иначе у вас будет негерметичный канал;)

0 голосов
/ 15 августа 2012

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

[((UIViewController *)yourID).view addSubview:yourView.view];
0 голосов
/ 13 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...