Es posible declarar implementaciones anónimas de elementos como Delegados en Objective-C. Creo que tengo el derecho de terminología, pero aquí hay un ejemplo de Java:Implementación de delegado anónimo en Objective-C?
myClass.addListener(new FancyInterfaceListener({
void onListenerInterestingAction(Action a){
....interesting stuff here
}
});
Así por ejemplo, para gestionar una llamada UIActionSheet tengo que declarar otro método en la misma clase, que parece un poco tonto si quiero pasar Datos, porque tendría que almacenar esos datos como una variable global. Aquí está un ejemplo de la eliminación de algo con un diálogo de confirmación que le pregunta si su seguro:
-(void)deleteItem:(int)indexToDelete{
UIActionSheet *confirm = [[UIActionSheet alloc] initWithTitle:@"Delete Item?" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete" otherButtonTitles:nil];
[confirm showInView:self.view];
[confirm release];
}
y la UIActionSheetDelegate en la misma clase:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0){
[[Settings sharedSettings] removeItemAtIndex:/*need index variable here*/];
[drinksTable reloadData];
}
}
Lo que yo quiero ser capaz de hacer es declarar en línea , tal como lo hice en el ejemplo de Java en la parte superior. es posible?
Acabo de escribir una posible solución para este tipo de situaciones [aquí] (https://github.com/GojaN/AnonymusDelegate). Tenga en cuenta que esta es una prueba de concepto. –
Sí, puede hacerlo con bibliotecas de terceros, lea mi respuesta completa aquí: http://stackoverflow.com/a/33096839/440168 – k06a