Parce que NSCopying
n'est pas très bon pour les copies profondes (récursives) de graphiques d'objets. Par exemple, [NSArray copy]
copie la liste des objets, pas les objets eux-mêmes. Les graphiques d'objets sont mieux servis par NSCoding
. Ce qui dans une heureuse coïncidence est pris en charge par UIView
.
Si vous souhaitez copier une vue personnalisée avec des propriétés, vous devez prendre en charge NSCoding
. Par exemple,
@interface SKCustomCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UILabel* nameLabel;
@property (strong, nonatomic) IBOutlet UIView* topView;
@end
static NSString* propertiesKey = @"SKCustomCellProperties";
@implementation SKCustomCell
@synthesize nameLabel;
@synthesize topView;
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder: aDecoder];
[self setValuesForKeysWithDictionary: [aDecoder decodeObjectForKey: propertiesKey]];
return self;
}
- (void) encodeWithCoder:(NSCoder *)aCoder
{
[super encodeWithCoder: aCoder];
[aCoder encodeObject: [self dictionaryWithValuesForKeys: [[NSArray alloc] initWithObjects: @"nameLabel", @"topView", nil] forKey: propertiesKey];
}
@end
Dans quelles circonstances avez-vous besoin de copier une vue? – Abizern
Cette question est seulement informative..Toutefois, pour répondre à votre question le problème qui a déclenché ma question était celui avec UIButtons. J'ai eu un UIButton qui était presque exactement comme un autre bouton. Je voulais donc copier le premier bouton dans le second. puis modifiez simplement les quelques différences. – SooDesuNe