将观察者添加到PDFView

时间:2019-04-29 19:27:20

标签: ios swift pdfkit notificationcenter

当用户滑动到PDFView的下一页或上一页时,我正在尝试进行一些UI更改。我将其设置为使用默认的PageViewController。我在PDFView上添加了一个观察者,并为其设置了一个选择器。当我尝试滑动时会崩溃,错误消息是这样的:

-[PDFView handlePageChangedWithNotification:] unrecognized selector sent to instance
...
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PDFView handlePageChangedWithNotification:]: unrecognized selector to instance.

我已经检查了委托方法,但没有找到任何有助于实现此功能的方法。因此,我假设我必须正确命名它才能正常工作。这是我用来添加观察者的代码:

// Add observer to pdfView
// This is added in viewDidAppear()
NotificationCenter.default.addObserver(pdfView, selector #selector(handlePageChange(view:)), name: .PDFViewPageChanged, object: nil)

// Selector method for observer
@objc private func handlePageChange(view: PDFView)
{
     // Do some changes
}

我希望能够检查显示新页面的时间,以便能够检查PDFOutline(如果此页面被标记为书签)并更改书签按钮以表明它已经是书签。感谢您提供的任何帮助。

编辑:我检查了PDFViewPageChanged通知的文档,并说通知对象是PDFView本身。它仍然崩溃,但是我想这是一个问题。我将上面的代码示例中的内容更改为现在的内容。

1 个答案:

答案 0 :(得分:1)

您要通知中心在通知触发时通知PDFViewPDFView没有实现该方法。无论您在哪个类中编写方法,都应处理通知。所以:

NotificationCenter.default.addObserver(self, selector #selector(handlePageChange(view:)), name: .PDFViewPageChanged, object: nil)

此外,您的通知处理程序方法具有错误的签名。通知中心将通知传递给方法,而不是实际视图,因此您希望它成为

@objc private func handlePageChange(notification: Notification)