L'oggetto eredita da NSObject.Come duplicare un UIButton nell'obiettivo C?
Esiste un metodo per crearne una copia come nuovo oggetto?
L'oggetto eredita da NSObject.Come duplicare un UIButton nell'obiettivo C?
Esiste un metodo per crearne una copia come nuovo oggetto?
UIButton non è conforme a NSCopying, quindi non è possibile fare una copia via -copy.
Tuttavia, è conforme a NSCoding, quindi è possibile archiviare l'istanza corrente, quindi annullare l'archiviazione di una 'copia'.
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject: button];
UIButton *buttonCopy = [NSKeyedUnarchiver unarchiveObjectWithData: archivedData];
In seguito, dovrete assegnare eventuali proprietà aggiuntive che non sono stati riportati in archivio (ad esempio, il delegato), se necessario.
Intelligente! Probabilmente avrei appena aggiunto -copy tramite una categoria, ma è meglio. =) –
Ottima idea, grazie Jim! –
Non è un po 'lento? – mattsven
Se implementa il protocollo NSCopying
, il metodo dovrebbe fare il trucco.
Sto provando a copiare un UIButton. Qualche idea? –
È possibile ottenere ulteriori informazioni sul metodo e su come funziona con gli oggetti secondari sul sito di riferimento ADC. Come menziona Stephen Darlington, è necessario implementare il protocollo NSCopying
nel proprio oggetto.
UIButton
non è conforme al protocollo NSCopying
, quindi è necessario copiarlo a mano. D'altra parte, non è una cosa negativa, dal momento che non è esattamente chiaro cosa significhi copiare un pulsante. Ad esempio, dovrebbe aggiungere la copia del pulsante alla stessa vista in cui si trova l'originale? Dovrebbe sparare gli stessi metodi quando toccato?
Per aggiungere alla risposta di Jim sopra utilizzando una categoria
@implementation UIButton (NSCopying)
- (id)copyWithZone:(NSZone *)zone {
NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:self];
UIButton *buttonCopy = [NSKeyedUnarchiver unarchiveObjectWithData: archivedData];
return buttonCopy;
}
@end
se si voleva copiare tutte le azioni da un tasto all'altro, aggiungere qualcosa di simile:
for (id target in button.allTargets) {
NSArray *actions = [button actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
for (NSString *action in actions) {
[newButton addTarget:target action:NSSelectorFromString(action) forControlEvents:UIControlEventTouchUpInside];
}
}
Perché stai cercando copiare un UIButton? Potrebbe esserci un percorso migliore ... –
C'è uno svantaggio nella copia di un UIButton? Ho bisogno di creare dinamicamente nuovi pulsanti basati su uno esistente. –
Duplica un pulsante per creare, ad esempio, una fila di pulsanti. @JamesSkidmore Ecco il codice completo http://stackoverflow.com/a/26438692/294884 – Fattie