2010-09-18 25 views
0

Je suis en train de calculer la hauteur totale de subviews dans un UIScrollView:Quel est le chemin KVC pour sommer les propriétés de sous-vue UIView?

[self.subviews valueForKeyPath:@"[email protected]"]; 

Mais cela jette les éléments suivants:

'NSUnknownKeyException', reason: '[<NSConcreteValue 0x4b10170> valueForUndefinedKey:]: this class is not key value coding-compliant for the key size.' 

J'ai essayé de placer l'opérateur @sum à divers endroits dans ce chemin, tous avec le même résultat.

Bien sûr, je pourrais le faire avec une boucle, mais je suis particulièrement curieux au sujet de la solution KVC - je suppose que c'est possible et je me trompe. Quel est le bon chemin?

Répondre

3

Ce n'est pas possible. size est une propriété dans la structure CGRect, pas une certaine propriété d'une classe (mêmes rendements pour height). Vous ne pouvez pas récupérer ces valeurs en utilisant KVC, puisque bounds n'est pas un objet, juste une structure.

+0

Cela explique. Merci! –

3

Vous pouvez le faire, mais pas directement (voir pourquoi @ JoostK). Voici comment je le ferais:

Créer une catégorie UIView qui ajoute une méthode, comme ceci:

@interface UIView (KVCAdditions) 

- (CGFloat) boundsHeight; 

@end 

@implementation UIView (KVCAdditions) 

- (CGFloat) boundsHeight { 
    return [self bounds].size.height; 
} 

@end 

Maintenant, vous devriez être en mesure de le faire:

NSNumber * totalHeight = [[self subviews] valueForKeyPath:@"@sum.boundsHeight"]; 
+3

Façon intelligente de le faire, mais pas la méthode de mon choix. Ajouter une méthode juste pour pouvoir utiliser KVC pour une simple addition n'a pas de sens pour moi. Illustration soignée de la possibilité cependant. – Joost