class EditTextViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UIPopoverPresentationControllerDelegate, UITextViewDelegate, UIDocumentInteractionControllerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var textView: UITextView!
@IBOutlet var contentImageView: UIImageView!

        func imageForTextView(UIView) -> UIImage {

        UIGraphicsBeginImageContextWithOptions(textView.bounds.size, false, 0)

        view.layer.renderInContext(UIGraphicsGetCurrentContext())
        var image = UIGraphicsGetImageFromCurrentImageContext() as UIImage
        UIGraphicsEndImageContext()

//        println(image)
        return image
    }
}

上面的代码具有我要调用的功能。 imageForTextView()截取我的textView的屏幕截图,并将其转换为UIImage。
class BackgroundEditTextViewController: UIViewController, UIPageViewControllerDataSource {

        @IBAction func instagramButton(sender: AnyObject) {
        println("yolo")

        EditTextViewController().imageForTextView(EditTextViewController().self.textView)
//        var editTextViewController = EditTextViewController()
//        editTextViewController.imageForTextView(editTextViewController.textView)
    }

}

我试图在BackgroundEditTextViewController类中调用“imageForTextView()”。当我点击“instagramButton”以调用“imageForTextView()”时,我想看到在控制台上打印出的UIImage。但我一直收到这个错误fatal error: unexpectedly found nil while unwrapping an Optional value(lldb),我试图使“imageForTextView()”成为一个类函数,但无济于事。

旁注:我在textView后面有一个UIImage,我想将其包含在图像屏幕快照中,但不太确定如何修改imageForTextView()以同时获取textView和contentImageView的屏幕快照。提前致谢。

最佳答案

一种简单的方法(不是面向对象的)是与世界共享imageForTextView,这意味着在该行中的func之前添加public-这是一个微不足道的解决方案,但是它将告诉您函数是否正常工作

public func imageForTextView(UIView) -> UIImage

另一种方法是使用委托来创建一个函数,该函数接收一个闭包作为适合imageForTextView签名的参数,如下所示
public func doSomeDelegate((UIView)->UIImage)

然后使用doSomeDelegate调用imageForTextView
那是一般的想法

您可以在官方快速指南中找到很好的解释
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html

浏览到有关授权的部分

10-08 05:35