Когда нам нужно отправить обновления на другие контроллеры представлений / представлений, мы используем уведомления через NSNitificationCenter.
В представлении, содержащем информацию, необходимую для другого представления, мы делаем что-то вроде этого:
// Setup Dictionary to contain values we want to pass.
NSMutableDictionary *theUserInfo = [[[NSMutableDictionary alloc] initWithCapacity:1] autorelease];
// Add our Objects to the Dictionary with a Key to get them out
[theUserInfo setObject:self forKey:@"ElementWithGesture"];
NSValue * pointAsObject = [NSValue valueWithCGPoint:translation];
[theUserInfo setValue:pointAsObject forKey:@"PanTranslation"];
[theUserInfo setObject:gestureRecognizer forKey:@"TheGestureRecognizer"];
// Post the Group Pan Notification.
[[NSNotificationCenter defaultCenter] postNotificationName:kNCSEGroupPanGesture
object:nil
userInfo:theUserInfo];
Затем в представлении, для которого нужна информация, мы добавляем код, чтобы сообщить центру уведомлений, что мы заинтересованы в конкретном уведомлении:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(groupHandlePanGesture:) // routine that will handle notification
name:kNCSEGroupPanGesture
object:nil];
Затем вам нужен метод, который фактически обрабатывает опубликованное уведомление:
-(void) groupHandlePanGesture:(NSNotification*)notification{
// unpack our objects from the dictionary
IoUIScreenElement *element = (IoUIScreenElement *) [[notification userInfo] objectForKey:@"ElementWithGesture"];
if ([self canPan] && ![self elementLocked]) {
// unpack our pointVlue
NSValue *pointValue = [[notification userInfo] valueForKey:@"PanTranslation"];
CGPoint translation = [pointValue CGPointValue];
if (IOFNOTEQUAL(self, element) & [self isSelected]){
CGFloat xPosition = self.frame.origin.x + translation.x;
CGFloat yPosition = self.frame.origin.y + translation.y;
[self setOrigin:CGPointMake(xPosition, yPosition)];
}
}
}
Затем по окончании прослушивания уведомлений вы хотите удалить своего наблюдателя.В зависимости от ваших взглядов, это чаще всего делается в delloc.
[[NSNotificationCenter defaultCenter] removeObserver:self
name:kNCSEGroupPanGesture
object:nil];