2015-10-10 1 views
0

Je ne comprends pas pourquoi ma propriété est réinitialisée à la valeur d'origine affectée (0.1). Je passe dans un fillHeight de 0.5 de la méthode extérieure. La propriété est définie dans le format pratique, mais ne s'applique pas à drawRect. Qu'est-ce que je rate?Problème de transmission de la propriété dans drawRect dans UIView

import UIKit 

class MyView: UIView { 

    var fillHeight: CGFloat = 0.1 

    override init(frame: CGRect) { 
    super.init(frame: frame) 

    } 
    convenience init(fillHeight: CGFloat) { 

    self.init() 
    self.fillHeight = fillHeight 
    print("self.fillHeight: \(self.fillHeight) and fillHeight: \(fillHeight)") 

    } 
    required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder)! 

    } 

    override func drawRect(rect: CGRect) { 

    print("drawRect self.fillHeight: \(self.fillHeight)") 
    // custom stuff 
    } 

} 

sortie sur la console:

outsideAmount: en option (0,5)

self.fillHeight: 0,5 et fillHeight: 0,5

drawRect self.fillHeight: 0,1

EDIT : L'appel externe provient de UITableViewController avec un UITableViewCell personnalisé. L'image est pour la cellule.

func configureCell(cell: CustomTableViewCell, atIndexPath indexPath: NSIndexPath) { 

    let myObject = self.fetchedResultsController.objectAtIndexPath(indexPath) as! MyObject 

    cell.nameLabel.text = myObject.name 
    cell.strengthLabel.text = myObject.strength 

    cell.myView = MyView(fillHeight: CGFloat(myObject.fillAmount!)) 
    ... 

PLUS EDIT:

import UIKit 

class CustomTableViewCell: UITableViewCell { 

    @IBOutlet weak var nameLabel: UILabel! 
    @IBOutlet weak var strengthLabel: UILabel! 
    @IBOutlet weak var myView: MyView! 


    override func awakeFromNib() { 
     super.awakeFromNib() 

    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

}

+0

J'ai essayé de reproduire votre erreur, mais dans mon cas, il imprime 'drawRect self.fillHeight: 0.5'. Pouvez-vous publier le code dans lequel vous initialisez la vue et l'ajouter à la pile de vues? – joern

+0

Merci joern. J'ai ajouté l'appel – Kurt

+0

Pourriez-vous poster comment vous définissez la propriété 'myView' dans votre cellule personnalisée? Est-ce une propriété facultative? – joern

Répondre

1

Le problème est que vous attribuez une nouvelle instance MyView chaque fois que vous configurez votre cellule. Vous n'avez pas à faire cela parce que la vue est déjà là (parce que vous l'avez ajouté dans la plume). Par conséquent, il suffit de définir fillHeight sur myView de la cellule. Cela résout le problème:

func configureCell(cell: CustomTableViewCell, atIndexPath indexPath: NSIndexPath) { 
    let myObject = self.fetchedResultsController.objectAtIndexPath(indexPath) as! MyObject 
    cell.nameLabel.text = myObject.name 
    cell.strengthLabel.text = myObject.strength 
    cell.myView.fillHeight = CGFloat(myObject.fillAmount!) 
    .... 
} 
+0

Merci beaucoup de rester avec moi! – Kurt