什么是用于求和UIView子视图属性的KVC路径?

时间:2010-09-18 18:31:50

标签: cocoa uiscrollview key-value-coding

我正在尝试计算UIScrollView中的子视图的总高度:

[self.subviews valueForKeyPath:@"bounds.size.@sum.height"];

但是这会引发以下情况:

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

我尝试将@sum运算符放在该路径中的不同位置,所有这些都具有相同的结果。

当然我可以用循环来做这件事,但我对KVC解决方案特别好奇 - 我认为这是可能的,我只是做错了。什么是正确的道路?

2 个答案:

答案 0 :(得分:3)

这是不可能的。 sizeCGRect结构中的属性,而不是某些类的某些属性(height的相同产量)。您无法使用KVC检索这些值,因为bounds不是对象,只是结构。

答案 1 :(得分:3)

你可以做到,但不能直接做(请参阅@ JoostK的回答)。我就是这样做的:

创建一个UIView类别,添加一个方法,如下所示:

@interface UIView (KVCAdditions)

- (CGFloat) boundsHeight;

@end

@implementation UIView (KVCAdditions)

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

@end

现在你应该能够做到这一点:

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