ios - 为什么 KVO 不能在 UIView 子类上工作?

标签 ios cocoa-touch uiview key-value-observing

我有一个 UIView 子类,它又有一个 contentView,在公共(public) header 中这样声明:

@property (nonatomic,retain)UIVivew* contentView;

我试图在 contentView 的框架发生变化时获取 KVO 通知,但我的 UIView 子类中从未调用过 observeValueForKeyPath 方法:

@implementation MyView


@synthesize contentView = _contentView;


- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

        [self.contentView addObserver:self 
                           forKeyPath:@"frame" 
                              options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) 
                              context:nil];
    }   
    return self;
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"frame"]) {
        CGRect newContentFrame = [[change objectForKey:NSKeyValueChangeNewKey] CGRectValue];
        CGRect selfNewFrame = self.frame;
        selfNewFrame.size = CGSizeMake(newContentFrame.size.width + 10, newContentFrame.size.height + 10);
        self.frame = selfNewFrame;
    }

    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}

关于为什么 KVO 没有触发的任何想法?

最佳答案

抱歉...我猜 sleep 不足...

忘记分配/初始化 contentView。

关于ios - 为什么 KVO 不能在 UIView 子类上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11910007/

相关文章:

iphone - CATiledLayer绘图崩溃

ios - 在当前用户位置放置图钉 iphone mkmapview

ios - Xamarin IOS - HttpClient - 在一台 iPad 而不是另一台 iPad 上工作的 API

ios - 在 iOS 应用程序中,如果计划触发计时器并且应用程序处于后台,我是否确定一旦应用程序再次进入前台,计时器就会触发?

ios - 如何锁定自定义UView的设计尺寸

ios - UICollectionView 显示隐藏动画问题

ios - 无法将 Carthage 框架链接到 Xcode 项目

ios - 找不到 RevMob/Revmob.h 文件

iphone - 我们怎样才能让 kCAOnOrderOut 工作呢?

objective-c - 访问数组中的元素 - 请求非结构或联合中的成员