如何将一个文本字段中的标记文本显示为Xcode swift 2中其他文本字段中的标记文本
我有两个文本字段,在我的OS X程序中有两个文本。我想有以下效果。当我在一个文本字段中标记部分文本时,我希望在另一个文本字段中标记相同的文本部分。如何在xcode中使用swift 2实现这一点 您可以创建两个文本视图(注意:类NSTextView非NSTextField),并使用插座将它们连接到视图控制器。再次连接最里面的文本视图,而不是剪辑视图或带边框的滚动视图。在下面的示例中,“searchView”是包含所选文本的视图,“textView”是包含要突出显示的文本的视图 然后,您可以这样做(注意,我在Swift 1.2中对此进行了测试)如何将一个文本字段中的标记文本显示为Xcode swift 2中其他文本字段中的标记文本,xcode,macos,swift,Xcode,Macos,Swift,我有两个文本字段,在我的OS X程序中有两个文本。我想有以下效果。当我在一个文本字段中标记部分文本时,我希望在另一个文本字段中标记相同的文本部分。如何在xcode中使用swift 2实现这一点 您可以创建两个文本视图(注意:类NSTextView非NSTextField),并使用插座将它们连接到视图控制器。再次连接最里面的文本视图,而不是剪辑视图或带边框的滚动视图。在下面的示例中,“searchView”是包含所选文本的视图,“textView”是包含要突出显示的文本的视图 然后,您可以这样做(
这将突出显示找到的第一个匹配项。然后,您可以实现按钮或某些东西来迭代匹配(例如,将“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)
}
}
}