【问题标题】:How to copy textField to OSX clipboard?如何将 textField 复制到 OSX 剪贴板?
【发布时间】:2011-04-08 23:25:02
【问题描述】:

我被困在这里了。我知道如何在 iPhone 端复制和粘贴,但如何将文本字段中的内容复制到 OSX 中的全局剪贴板。我一直在网上搜索,但真的没有例子。因此,让我详细解释一下我要完成的工作。我有一个名为 helloField 的 NSTextField,我希望能够通过按下按钮将此 helloField 的内容复制到全局粘贴板。如何做到这一点,我需要某些库吗?谢谢。

【问题讨论】:

    标签: objective-c xcode macos copy clipboard


    【解决方案1】:

    在 iOS 上

    [UIPasteboard generalPasteboard].string = helloField.text;
    

    在 OSX 上

    [[NSPasteboard generalPasteboard] clearContents];
    [[NSPasteboard generalPasteboard] setString:helloField.stringValue forType:NSStringPboardType];
    

    在 macOS 和 Swift 3.x 上

    let pasteBoard = NSPasteboard.general()
    pasteBoard.clearContents()
    pasteBoard.writeObjects([text as NSString])
    

    【讨论】:

    • 刚刚发现(在 MonoMac for OS X 上)clearContents 是必需的,否则 setString 将失败并返回 FALSE
    • 在 Swift 实现的第一行必须省略括号:let pasteBoard = NSPasteboard.general
    • NSStringPboardType 已弃用:首先在 macOS 10.14 中弃用。将NSStringPboardType 替换为NSPasteboardTypeString
    【解决方案2】:

    对于 Swift 5

    let pasteboard = NSPasteboard.general
    pasteboard.clearContents()
    pasteboard.setString("string to copy", forType: .string)
    

    【讨论】:

      【解决方案3】:

      将字符串复制到剪贴板的代码:

      [[NSPasteboard generalPasteboard] clearContents];
      [[NSPasteboard generalPasteboard] setString:copiedString forType:NSPasteboardTypeString];
      

      NSStringPboardType 已弃用。 NSPasteboard.h 中有一条关于 pboard 类型的注释:

      应使用 UTI 代替使用 pboard 类型。 Pboard 类型将在未来版本中弃用。

      头文件中也有:

      APPKIT_EXTERN NSString *const NSPasteboardTypeString NS_AVAILABLE_MAC(10_6); // 替换 NSStringPboardType
      ...
      APPKIT_EXTERN NSString *NSStringPboardType; //使用NSPasteboardTypeString

      【讨论】:

        【解决方案4】:

        对于 Swift 3 中的 Cocoa macOS:

        let pasteBoard = NSPasteboard.general()
        pasteBoard.clearContents()
        pasteBoard.setString("something", forType: NSPasteboardTypeString)
        

        【讨论】:

          【解决方案5】:
          Clipboard.set("some text")
          

          类:

          import AppKit
          
          public class Clipboard {
              public static func set(text: String?) {
                  if let text = text {
                      let pasteBoard = NSPasteboard.general
                          pasteBoard.clearContents()
                          pasteBoard.setString(text, forType: .string)
                  }
              }
              
              @available(macOS 10.13, *)
              public static func set(url: URL?) {
                  guard let url = url else { return }
                  let pasteBoard = NSPasteboard.general
                  
                  pasteBoard.clearContents()
                  pasteBoard.setData(url.dataRepresentation, forType: .URL)
              }
              
              @available(macOS 10.13, *)
              public static func set(urlContent: URL?) {
                  guard let url = urlContent,
                        let nsImage = NSImage(contentsOf: url)
                  else { return }
                  
                  let pasteBoard = NSPasteboard.general
                  pasteBoard.clearContents()
                  pasteBoard.writeObjects([nsImage])
              }
              
              public static func clear() {
                  NSPasteboard.general.clearContents()
              }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-12
            • 1970-01-01
            • 2013-11-21
            • 2010-10-09
            相关资源
            最近更新 更多