Как сослаться на подпредставление без розетки - PullRequest
0 голосов
/ 15 февраля 2010

Просто, начиная с разработки для iPhone, я, кажется, упускаю что-то фундаментальное.

В приложении, основанном на View, я программно добавляю подкласс UIView в файл реализации ViewController и могу установить значение:

- (void)viewDidLoad {

    [super viewDidLoad];

 CGRect myRect = CGRectMake(20, 50, 250, 320);

 GraphView *graphView = [[GraphView alloc] initWithFrame:myRect];

 [self.view addSubview:graphView];

    graphView.myString = @"Working here";

}

Когда я пытаюсь изменить одно и то же значение с действием в том же файле, сборка завершается неудачно, потому что graphView не объявлен:

- (void)puschButton1 {


 graphView.myString = @"Not working here";

}

Поскольку я использую подкласс UIView, для моего экземпляра GraphView нет выхода.

Как я могу получить ссылку на мое подпредставление? Или это должно быть сделано по-другому?

Заранее спасибо

Frank

Ответы [ 2 ]

0 голосов
/ 15 февраля 2010

Самое простое решение - сделать graphView переменной экземпляра для вашего контроллера представления, вместо того, чтобы объявлять ее в viewDidLoad.

Поместите что-то вроде этого в ваш .h файл:

@class GraphView;

@interface MyViewController : UIViewController {
    GraphView *graphView;
}

// ... method declarations ...

@end

Если вы не хотите этого делать, другой способ - установить свойство graphView tag, а затем вызвать метод viewWithTag: суперпредставления, чтобы получить представление, когда вам это нужно.

Я не уверен, что вы подразумеваете под «потому что я использую подкласс UIView, для моего экземпляра GraphView нет выхода». Обычно вы объявляете розетки в своем классе контроллера, и не имеет значения, используете ли вы подкласс UIView.

В качестве отступления отмечу, что вам, вероятно, следует release, что GraphView в какой-то момент, иначе у вас будет утечка памяти.

0 голосов
/ 15 февраля 2010

Вы можете хранить graphView как переменную класса.

РЕДАКТИРОВАТЬ: обратите внимание, что addSubview увеличит количество сохраняемых объектов, где-то в вашем классе вам нужно будет сбалансировать alloc с release и addSubview с removeFromSuperview или release.

...