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

在这种情况下,也有解决办法来接收通知吗?我想通知是在调用属性currentPreviewItemIndex的setter时生成的,并且可能是当用户在对象QLPreviewController内部滑动属性时更改了通知。

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

先谢谢您的帮助。

贾南德里亚

最佳答案

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

认真地:
我尝试了KVO,但它对我也不起作用。.1)id向苹果提交了一个bug,说您需要这个

但是作为一种解决方法

  • (id)previewPanel:(QLPreviewPanel *)面板PreviewItemAtIndex:(NSInteger)index {

  • 这被称为确定,每次我们滑动时,我都会对此进行“破解”以激发您自己的正确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"];
         }
    

    我在此处以内联方式编写它,因此肯定会有错别字和错误,但是我认为一般方法可以奏效。

    关于objective-c - 观察QLPreviewController.currentPreviewItemIndex的键值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13270731/

    10-09 19:42