Вызов метода в подпредставлении - PullRequest
2 голосов
/ 18 июня 2009

Эй, ребята! У меня есть маленькая проблема:

У меня есть один ViewController, который добавляет 2 подвида в мой ViewController, поэтому у меня есть что-то вроде этого:

//in my viewController.m i have this:
- (void)startIcons
{
    IconHolder *newIconHolder = [[IconHolder alloc] initWithItem:@"SomeItenName"];
    [self.view addSubview:newIconHolder];
}
- (void)onPressIcon targetIcon(IconHolder *)pressedIcon
{
    NSLog(@"IconPressed %@", [pressedIcon getName]);
}

А это мои подклассы:

//And in my IconHolder.m i have this:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
    //Here i need to call the method onPressIcon from my ViewController
}

Сейчас: Как я могу это сделать? Лучший способ создать ссылку в моем конструкторе, чтобы сохранить мой ViewController? Как мне это сделать?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 июня 2009

Да, вы должны создать эту ссылку, как вы и предполагали.

Просто добавьте переменную-член MyViewController* viewController к вашему представлению и настройте ее при создании представления. Если вы хотите стать умным, вы можете создать его как свойство.

Остерегайтесь того, что вам не следует сохранять viewController из представления, хотя представление уже сохранено контроллером, и если у вас есть сохранение, идущее в другую сторону, вы создадите цикл сохранения и вызовете утечку. *

0 голосов
/ 19 июня 2009

Альтернативой созданию связи является использование уведомлений.

Например, в IconHolder.h

extern const NSString* kIconHolderTouchedNotification;

В IconHolder.m

const NSString * kIconHolderTouchedNotification = @ "IconHolderTouchedNotification";

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
    //Here i need to call the method onPressIcon from my ViewController
    [[NSNotificationCenter defaultCenter] kIconHolderTouchedNotification object:self];
}

Тогда в вашем контроллере

- (void) doApplicationRepeatingTimeChanged:(NSNotification *)notification
{
   IconHolder* source = [notification object];
}

- (IBAction) awakeFromNib;
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doIconHolderTouched:) name:kIconHolderTouchedNotification object:pressedIcon];
}

- (void) dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name: kIconHolderTouchedNotification object:pressedIcon];
    [super dealloc];
}

Уведомления особенно хороши, если вы хотите очень слабую связь между объектами и не нуждаетесь в двусторонней связи (т. Е. IconHolder не нужно запрашивать информацию у контроллера) или если вам нужно уведомить более одного объекта об изменениях.

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