Ricezione di eventi dell'interfaccia utente in classi C ++
-
25-10-2019 - |
Domanda
sto scrivendo Objective-C ++ in Xcode per iOS. Il mio progetto è per lo più classi C ++ e un paio di classi Objective-C al più alto livello. Le mie classi C ++ contengono Objective-C elementi dell'interfaccia utente e ho bisogno di loro di ricevere eventi dell'interfaccia utente. E 'possibile per un elemento dell'interfaccia utente per chiamare direttamente una funzione C ++ membro? Cioè c'è un equivalente a questa richiesta di una funzione C ++:
[control addTarget:object action:@selector(action:) forControlEvents:event];
Da quello che ho capito @selector
non mi aiuterà qui. Avrei bisogno di un altro modo per rendere il controllo chiamare il mio funzione membro -? Si fa a esistere
Per ora, sto usando una classe di ricevitore Objective-C, un membro del mio classi C ++, che riceve gli eventi di interfaccia utente e quindi chiama la mia classe C ++ in modo appropriato, ma questo sembra un modo indiretto per raggiungere tale obiettivo. Se quello che ho descritto non è possibile, c'è un modo migliore per fare quello che sto cercando di fare?
Soluzione
Credo che hai già scoperto la soluzione più semplice. Si potrebbe incapsulare ulteriormente questa funzionalità implementando ponte Obj-C / C ++ in C ++ classe di base e ricavare le tue classi logica di business da quello.
è un'altra opzione, che è quello di fare questo a livello di runtime Objective-C. Avere la classe C ++ generare una nuova classe Objective-C con objc_allocateClassPair()
, aggiungere un metodo per la gestione della tua azione con class_addMethod()
, ecc (vedi Objective-C runtime di riferimento ) non vedo alcuna ragione evidente per cui ci si vuole imboccare questa strada, ma è bello per essere a conoscenza di esso.