QLPreviewController.currentPreviewItemIndex的键值观察

jea*_*n71 5 io objective-c key-value-observing uikit

当QLPreviewController更改显示的文档时,我有一个需要通知的对象.QLPreviewController具有属性currentPreviewItemIndex,该属性在文档更改时更新.我已经添加了我的对象作为currentPreviewItemIndex的观察者,它在我的代码中更改了属性时收到通知,到目前为止一切都很好.问题是用户可以在屏幕上更改显示的文档,我发现在这种情况下不会生成通知.

在这种情况下,收到通知的任何解决方案?我想当通知属性currentPreviewItemIndex的setter时生成通知,并且可能在用户滑动属性时在对象QLPreviewController内部更改.

另一种解决方案可能是在QLPreviewController中禁用水平滑动但保留垂直滑动(有箭头按钮来更改显示的文档).你是怎样做的?

在此先感谢您的帮助.

Giannandrea

Dai*_*jan 1

在 QLPreviewController 上创建一个类别并调整适当的方法,然后为 KVO 添加 willChange/didChange ;)

不过说真的:我尝试过KVO,但它对我来说也不起作用.. 1)id向苹果提交了一个错误,因为说你需要这个

但作为解决方法

  • (id )previewPanel:(QLPreviewPanel *)面板预览ItemAtIndex:(NSInteger)index {

这就是所谓的“ok”,每次我们滑动时,我都会“破解”它来触发你自己的正确 KVO。就像是

     static NSInteger oldIndex = -1; //reset when the panel is hidden or shown
     int newIndex = qlController.displayedIndex;
     if(oldIndex != newIndex) {
         oldIndex = newIndex;
         [qlController willChangeValueForKey:@"displayedIndex"];
         [qlController didChangeValueForKey:@"displayedIndex"];
     }
Run Code Online (Sandbox Code Playgroud)

我在这里内联写了它,所以肯定会有拼写错误和错误,但我认为一般方法是可行的。