当用户点击选项菜单上的剪切或者复制按钮时,系统会调用响应者的cut(_:)或者copy(_:)方法,如果是UITextView、UITextField或者WKWebView,这些方法由UIKit实现。没有特殊需求的情况下,我们不需要覆写这些方法;但如果是其他控件,继承自UIResponder类,则需要实现这些方法来响应事件。如果第一响应者没有实现这些方法,那么这个调用会进入响应者链。如果需要响应这些事件,可以声明这个类是满足UIResponderStandardEditActions协议的。
我们需要把和选定内容相对应的对象或数据以尽可能多的表示形式写入到粘贴板上,这是14.4.2小节中已经提到过的。在cut(_:)或者copy(_:)的实现中,一般通过如下六个步骤将数据传入粘贴板中:
1.将数据封装至粘贴板可以存储的类型。
比如NSString、NSArray、NSDictionary、NSDate、NSNumber或者NSURL,这些数据结构是能够被粘贴板接收的。
2.将数据转换为多个表示形式。
例如复制图像时,创建UIImage实例的过程中,可以通过UIImagePNGRepresentation(_ image: UIImage)或UIImageJPEGRepresentation(_ image: UIImage, _ compressionQuality: CGFloat)函数将图像转换为不同的编码方式。
3.获取粘贴板。(www.xing528.com)
一般系统的粘贴板就用UIPasteboard.general获取。
4.为数据获取合适的UTI作为类型标识。
5.将每种类型的数据传入粘贴板中。
可以使用两种方法:如果传入非Data类型的则使用setValue(_ value: Any, forPasteboardType pasteboardType: String),如果传入数据则使用setData(_ data: Data, forPasteboardType pasteboardType: String)。
6.如果是剪切,需要更新视图。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。