【问题标题】:Get selection (highlighted text) string from NSTextView Objective-C从 NSTextView Objective-C 获取选择(突出显示的文本)字符串
【发布时间】:2012-12-11 00:57:20
【问题描述】:

如何从NSTextView 中获取选定文本的字符串作为NSString?

非常感谢您的帮助。

【问题讨论】:

    标签: objective-c xcode macos nsstring nstextview


    【解决方案1】:

    一个 NSText 可以有多个选择。使用 TextEditapp 进行检查:在按住 CMD 的同时用鼠标选择一个字符串。因此,您可以选择任意数量的字符串。因此我认为,一个更常见的解决方案是使用:

    NSArray *ranges = [myTextView selectedRanges];
    

    然后一一提取字符串。

    【讨论】:

    • 好电话!但是请记住,这仅适用于 NSTextView 实例,而不仅仅是 NSText。见the method documentation
    【解决方案2】:

    由于 NSTextView 是 NSText 的子类,你可以像这样使用NSText 实例方法来找出选中的字符串:

    NSString *selected = [[myTextView string] 
                          substringWithRange:[myTextView selectedRange]];
    

    【讨论】:

      【解决方案3】:

      Swift 5,处理多选 NSTextView 基于@vauxhall 的回答

      extension NSTextView {
          var selectedText: String {
              var text = ""
              for case let range as NSRange in self.selectedRanges {
                  text.append(string[range]+"\n")
              }
              text = String(text.dropLast())
              return text
          }
      }
      
      extension String {
          subscript (_ range: NSRange) -> Self {
              .init(self[index(startIndex, offsetBy: range.lowerBound) ..< index(startIndex, offsetBy: range.upperBound)])
          }
      }
      

      【讨论】:

        【解决方案4】:

        斯威夫特

        extension NSTextView {
            var selectedText: String {
                string[selectedRange()]
            }
        }
        
        extension String {
            subscript (_ range: NSRange) -> Self {
                .init(self[index(startIndex, offsetBy: range.lowerBound) ..< index(startIndex, offsetBy: range.upperBound)])
            }
        }
        

        用法

        let textView = NSTextView()
        print(textView.selectedText)
        

        【讨论】:

        • 警告:NSTextView 有一个 selectedRangeS 属性,因为可以执行多个选择。应该修改此代码。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-18
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 2011-07-19
        相关资源
        最近更新 更多