KVO 观察 UITabBarViewController 的selectedindex 属性无效

遇到的问题:

今天做MVVM框架的时候我尝试写一个路由转发的类,但是在对UITabBarViewController的selectedIndex进行键值观察的时候发现并没有起作用,用到的具体API。

- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;

- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary*)change context:(nullable void *)context;未调用,

具体代码:

@property (nonatomic, strong) UITabBarController *targetTB;

[self addObserver:self forKeyPath:@"targetTB.selectedIndex" options:NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context

{  //break point here }

我不明白系统怎么实现的,我想尝试点击TabBarItem切换selectedindex的时候是否调用了selectedIndex的setter方法,我重写了selectedIndex的setter方法, 系统并没有调用selectedIndex的setter方法 , 而且很奇怪的是在setter方法内部取不到_selectedIndex。但是如果我手动修改self.targetTB.selectedIndex的值时,-observeValueForKeyPath方法被执行了。我暂时在网上没有找到问题的原因,于是根据TabBarViewController的其他属性我迂回实现了自己想要的效果。

实现TabBarViewController点击切换TabBarItem获取时间的具体代码如下:

@property (nonatomic, strong) UITabBarController *targetTB;

[self addObserver:self forKeyPath:@"targetTB.selectedViewController" options:NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void *)context

{  //write your code here }

你可能感兴趣的:(KVO 观察 UITabBarViewController 的selectedindex 属性无效)