Delegates

Design pattern for å få et objekt til å delegere deler av sine oppgaver til et annet objekt

Eksempel med UIAlertView

Vi setter oss selv som delegate i UIAlertView. UIAlertView kaller tilbake på oss ved hjelp av en selector

@implementation MinViewController
- (void)showAlertView {
	UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Advarsel"
		message:@"Beskjed"
		delegate:self /* Setter oss selv som delegate på UIAlertViewet */
		cancelButtonTitle:@"Ok"
		otherButtonTitles:nil];
	[alert show];
}

- (void)alertView:(UIAlertView *)alertView 
	clickedButtonAtIndex:(NSInteger)buttonIndex {
	NSLog(@"Trykket på en knapp!");
}
@end

// Mulig implementasjon av UIAlertView
@implementation UIAlertView
//[...show...]
	/* UIAlertView vises, og kjører følgende kode når man trykker på en knapp */
	if ([_delegate respondsToSelector:@selector(alertView:clickedButtonAtIndex:)]) {
		/* Kaller funksjonen alertView:clickedButtonAtIndex: på delegatet */
		[_delegate alertView:self clickedButtonAtIndex:buttonIndex];
	}
//[...]
@end