У вас есть несколько вариантов здесь ...
Сначала создайте свойство на вашем IconsViewController типа ParentViewController*
, например:
@property (readwrite,nonatomic,assign) ParentViewController* parentController; // weak reference
Чтобы разбить это дальше:
readwrite
, потому что мы хотим иметь возможность доступа к значению через [self parentController]
, а также изменить его через [iconsViewController setParentController:self]
nonatomic
потому что я не слишком беспокоюсь о потоке
assign
, чтобы сделать его "слабой ссылкой", когда родитель не будет удерживаться ребенком. Если каждый из них retain
другой, это может привести к утечкам памяти позже, потому что, если явно не освободить, вы получите круг сохранения, в результате чего ни один объект не достигнет нулевого счетчика сохранения.
При загрузке с пера установите свойство:
IconsViewController *iconsViewController = [[IconsViewController alloc] initWithNibName:@"IconsView" bundle:nil];
iconsViewController.parentController = self;
Затем вызовите его изнутри iconIsSelected
так:
[[self parentController] changeIcon];
В качестве альтернативы вы можете создать протокол делегата:
@protocol IconViewSelectedDelegate (NSObject)
- (void) changeIcon;
@end
И используйте этот протокол в качестве свойства вместо родительского типа контроллера представления. Это более абстрактно, но сохраняет дизайн чище. Затем родительский контроллер представления будет реализовывать этот протокол делегата, как один из многих других.
Другой вариант - использовать NSNotificationCenter и публиковать / подписываться на события из вашего динамического представления. Это самая «слабая» связь между двумя объектами, но она может быть излишней для этого сценария.