Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将一个文本字段中的标记文本显示为Xcode swift 2中其他文本字段中的标记文本_Xcode_Macos_Swift - Fatal编程技术网

如何将一个文本字段中的标记文本显示为Xcode swift 2中其他文本字段中的标记文本

如何将一个文本字段中的标记文本显示为Xcode swift 2中其他文本字段中的标记文本,xcode,macos,swift,Xcode,Macos,Swift,我有两个文本字段,在我的OS X程序中有两个文本。我想有以下效果。当我在一个文本字段中标记部分文本时,我希望在另一个文本字段中标记相同的文本部分。如何在xcode中使用swift 2实现这一点 您可以创建两个文本视图(注意:类NSTextView非NSTextField),并使用插座将它们连接到视图控制器。再次连接最里面的文本视图,而不是剪辑视图或带边框的滚动视图。在下面的示例中,“searchView”是包含所选文本的视图,“textView”是包含要突出显示的文本的视图 然后,您可以这样做(

我有两个文本字段,在我的OS X程序中有两个文本。我想有以下效果。当我在一个文本字段中标记部分文本时,我希望在另一个文本字段中标记相同的文本部分。如何在xcode中使用swift 2实现这一点

您可以创建两个文本视图(注意:类NSTextView非NSTextField),并使用插座将它们连接到视图控制器。再次连接最里面的文本视图,而不是剪辑视图或带边框的滚动视图。在下面的示例中,“searchView”是包含所选文本的视图,“textView”是包含要突出显示的文本的视图

然后,您可以这样做(注意,我在Swift 1.2中对此进行了测试)


这将突出显示找到的第一个匹配项。然后,您可以实现按钮或某些东西来迭代匹配(例如,将“foundRanges”存储在某个位置,并使用按钮迭代其索引,等等)。您可能还希望实现一些错误检查和/或可选链接,因为在我的示例中,所有这些nil和强制降级都可能导致崩溃

你说的“标记”是什么意思?例如,突出显示文本不确定如果可能,想要这样做的原因是什么…也许有另一种方法来实现这一点。这是可能的,我在其他程序中看到过这一点。原因如下。我发现字符串aattcggtt(放在一个文本字段中)存在于其他字符串acagactgacaattcggttacgaa(放在其他文本字段中),我希望通过在较大字符串中突出显示来查看较小字符串的位置。它在分子生物学中非常有用。理想情况下,动态地,当我标记文本时,它会立即显示在其他文本中。谢谢,这非常有用!它运行良好。我使用for循环突出显示了nsrange数组中的所有位置。
class ViewController: NSViewController {


    @IBOutlet var textView: NSTextView!
    @IBOutlet var searchView: NSTextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
       NSNotificationCenter.defaultCenter().addObserver(self, selector: "selectedSomeText:", name: NSTextViewDidChangeSelectionNotification, object: searchView)
    }

    @objc func selectedSomeText(notification: NSNotification) {
        let selectedRange = searchView.selectedRange()
        if selectedRange.length > 0 {
            let nsString = searchView.string! as NSString
            let selectedString = nsString.substringWithRange(selectedRange)
            let regex = NSRegularExpression(pattern: selectedString, options: nil, error: nil)
            let foundRanges = regex?.matchesInString(textView.string!, options: nil, range: NSRange(location: 0, length: count(textView.string!)))

            let firstFound = foundRanges![0] as! NSTextCheckingResult
            textView.showFindIndicatorForRange(firstFound.range)
         }
    }

}