我的OS X程序中有两个文本字段有两个文本。我想有以下效果。当我在一个文本字段中标记部分文本时,我希望在其他文本字段中具有相同标记的文本部分。如何在xcode和swift 2中实现它?
答案 0 :(得分:2)
您可以创建两个TextView(注意:类NSTextView而不是NSTextField)并使用outlet将它们连接到视图控制器。再次,连接最里面的TextView,而不是剪辑视图或带边框的滚动视图。在下面的示例中" searchView"是包含您选择的文本的那个," textView"包含您要突出显示的文本的那个。
然后,你可以做这样的事情(注意我在Swift 1.2中测试过这个)
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)
}
}
}
这将突出显示第一个找到的匹配。然后,您可以实现按钮或某些东西来迭代匹配(例如,通过存储" foundRanges"某处并使用按钮迭代其索引等)。您可能还希望实现一些错误检查和/或可选链接,因为我的示例中的所有这些nils和强制向下转发可能会导致崩溃。