E 'possibile dichiarare implementazioni anonime di cose come i delegati in Objective-C. Credo di avere il diritto terminologia, ma ecco un esempio di Java:Implementazione delegato anonimo in Objective-C?
myClass.addListener(new FancyInterfaceListener({
void onListenerInterestingAction(Action a){
....interesting stuff here
}
});
Così, ad esempio, per gestire una chiamata in UIActionSheet devo dichiarare un altro metodo nella stessa classe, che sembra un po 'sciocco, se voglio passare dati, perché dovrei memorizzare tali dati come variabile globale. Ecco un esempio di cancellazione di qualcosa con una finestra di conferma che chiede se il vostro sicuro:
-(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];
}
e l'UIActionSheetDelegate nella stessa classe:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0){
[[Settings sharedSettings] removeItemAtIndex:/*need index variable here*/];
[drinksTable reloadData];
}
}
Quello che voglio essere in grado di fare è di dichiararla in linea , proprio come ho fatto nell'esempio java in alto. È possibile?
Ho appena scritto una soluzione possibile per questo tipo di situazioni [qui] (https://github.com/GojaN/AnonymusDelegate). Tieni presente che questa è una prova di concetto. –
Sì, puoi farlo con le librerie di terze parti, leggi la mia risposta completa qui: http://stackoverflow.com/a/33096839/440168 – k06a