【问题标题】:KVO not working with UISwitchKVO 不能与 UISwitch 一起使用
【发布时间】:2011-11-03 20:53:14
【问题描述】:

在我的一生中,我无法让 KVO 与 UISwitch 一起工作。我有一个自定义 UITableViewCell ,其中包含通过 Interface Builder 添加的 UISwitch 。我为 UISwitch 创建了一个 IBOutlet 并将其链接到 theSwitch 变量。

- (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    if (self) {
           [theSwitch addObserver:self forKeyPath:@"on" options:NSKeyValueObservingOptionNew context:NULL];
    }
    return self;
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    NSLog(@"toggled switch");
}

observeValueForKeyPath:ofObject:change:context 永远不会被调用!

【问题讨论】:

    标签: ios key-value-observing uiswitch


    【解决方案1】:

    我不确定,但 UISwitch 可能根本不兼容 KVO。

    没关系,因为你可以使用控制事件:

    [theSwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
    // ...
    - (void)switchChanged:(UISwitch *)sender {
        if (sender.on) {
            // ...
        }
    }
    

    【讨论】:

    • 这就是我现在正在做的事情,它可以工作,但我在其他任何地方都使用 KVO,所以我想保持我的代码一致。像这样的事情应该只是工作。感谢您的建议。
    【解决方案2】:

    添加观察者时,theSwitch 可能尚未初始化。尝试在 awakeFromNib 中添加观察者。

    【讨论】:

    • 实际上,并非所有 Apple 的类都兼容 KVO。这就是问题所在。
    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2017-04-14
    • 2016-09-16
    相关资源
    最近更新 更多