我有一个以下助手类
class PDFPreviewHelper {
var pdfNavigationController: UINavigationController!
func previewButtonPressed(rootViewController: UIViewController) {
let pdfViewController = PDFViewController(resource: "final.pdf")
pdfNavigationController = UINavigationController(rootViewController: pdfViewController)
let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backButtonPressedInPDF")
pdfViewController.navigationItem.setLeftBarButtonItem(backButton, animated: false)
rootViewController.presentViewController(pdfNavigationController, animated: true, completion: nil)
}
func backButtonPressedInPDF() {
pdfNavigationController.dismissViewControllerAnimated(true, completion: nil)
}
}
我在rootviewcontroller中的上面的helper类中调用了一个函数,如下所示:
func previewInPdfButtonPressed() {
let a = PDFPreviewHelper()
a.viewI129InPDF(self)
}
我在pdfNavigationController
之上成功地模仿rootViewController
,但每当按back
按钮时,都不会调用任何内容。为什么会这样?我在backButtonPressedInPDF
函数中设置了一个断点,它甚至没有达到断点。
答案 0 :(得分:0)
我认为问题出在这里。
let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backButtonPressedInPDF")
要:
let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backButtonPressedInPDF:")
我认为action: "backButtonPressedInPDF"
处的问题存在:
此外,还可以通过添加(sender:AnyObject)
来更改您的方法吗?
func backButtonPressedInPDF(sender:AnyObject) {
pdfNavigationController.dismissViewControllerAnimated(true, completion: nil)
}
答案 1 :(得分:0)
您需要通过以下方式将leftBarButtonItem
分配给UINavigationController
。
pdfViewController.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backButtonPressedInPDF")
答案 2 :(得分:0)
问题是您正在创建PDFPreviewHelper
类的临时实例并使用它来呈现视图控制器。没有保留参考。
这可以通过两种方式解决:
方法1:将previewInPdfButtonPressed
方法添加到PDFViewController
课程。然后改变实现如下。
let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: pdfViewController, action: "backButtonPressedInPDF")
方法2:
您应该保留对象a
,直到您解除PDFViewController-navigationcontroller
为止。
即使你喜欢这样,你也会得到像
2016-03-16 15:43:03.140 XXXX[3757:585277] *** NSForwarding: warning: object 0x7ff5eb72be70 of class 'XXXX.PDFPreviewHelper' does not implement methodSignatureForSelector: -- trouble ahead
Unrecognized selector -[XXXX.PDFPreviewHelper backButtonPressedInPDF]
这是因为您没有为NSObject
创建PDFPreviewHelper
的子类。
您可以通过两种方式修复它,
PDFPreviewHelper
设为NSObject
子类。dynamic
像dynamic func previewInPdfButtonPressed() {....}
。答案 3 :(得分:0)
func previewInPdfButtonPressed()
{
let a = PDFPreviewHelper()
a.viewI129InPDF(self)
}
当程序超出此功能的范围时,问题是a
被释放。您在a
上定位的操作当然不能再执行
解决方案添加a
作为viewController