Je construis des formulaire dans des UITable, chaque UITableViewCell peut donc contenir des UILabel, UISwitch, UIButton, etc. Je partage le code entre plusieurs application, mais j'ai eu un bug dans l'une d'elles que je n'avais pas dans les autres. Les gadgets interactifs ne fonctionnaient pas...
En fait, j'avais construit mes UITableViewCell avec du code comme celui-ci :
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
self.backgroundColor = [UIColor clearColor];
_uiLabel = [UILabel new];
_uiLabel.frame = CGRectMake(8, 4, self.frame.size.width-51-24, self.frame.size.height-8);
_uiLabel.translatesAutoresizingMaskIntoConstraints = NO;
_uiLabel.textAlignment = NSTextAlignmentLeft;
_uiLabel.lineBreakMode = NSLineBreakByWordWrapping;
_uiLabel.adjustsFontSizeToFitWidth = YES;
_uiLabel.minimumScaleFactor = 0.5;
_uiLabel.numberOfLines = 0 ;
_uiLabel.text = NSLocalizedString(@"none", nil);
[_uiLabel removeConstraints:_uiLabel.constraints];
[self addSubview:_uiLabel];
_uiSwitch = [UISwitch new];
_uiSwitch.frame = CGRectMake(self.frame.size.width-_uiSwitch.frame.size.width-8,
self.frame.size.height/2-16,
_uiSwitch.frame.size.width,
_uiSwitch.frame.size.height);
_uiSwitch.translatesAutoresizingMaskIntoConstraints = NO;
[_uiSwitch addTarget:self action:@selector(changeOn:) forControlEvents:UIControlEventValueChanged];
[_uiSwitch removeConstraints:_uiSwitch.constraints];
[self addSubview:_uiSwitch];
NSDictionary *children =@{ @"label":_uiLabel,@"sw":_uiSwitch };
[self addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-8-[label(>=160)]-8-[sw]-16-|"
options:0 metrics:nil views:children]];
[self addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-8-[label]-8-|"
options:0 metrics:nil views:children]];
[self addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-8-[sw]-8-|"
options:0 metrics:nil views:children]];
[self setNeedsLayout];
return self;
}
[self.contentView addSubview:_uiLabel];
[self.contentView addSubview:_uiSwitch];
NSDictionary *children =@{ @"label":_uiLabel,@"sw":_uiSwitch };
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-8-[label(>=160)]-8-[sw]-16-|"
options:0 metrics:nil views:children]];
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-8-[label]-8-|"
options:0 metrics:nil views:children]];
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-8-[sw]-8-|"
options:0 metrics:nil views:children]];
Commentaires