作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 OS X 程序中有两个包含两个文本的文本字段。我想有以下效果。当我在一个文本字段中标记部分文本时,我希望在其他文本字段中具有相同的文本标记部分。我如何在 xcode 中使用 swift 2 实现它?
最佳答案
您可以创建两个 TextView(注意:类 NSTextView 而不是 NSTextField)并使用 socket 将它们连接到 View Controller 。同样,连接最里面的 TextView,而不是剪辑 View 或带边框的 ScrollView 。在下面的示例中,“searchView”是包含您选择的文本的 View ,而“textView”是包含您要突出显示的文本的 View 。
然后,你可以这样做(注意我在 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 和强制向下转型都可能导致崩溃。
关于xcode - 如何在 Xcode, swift 2 中将一个文本字段中的标记文本显示为其他文本字段中的标记文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320391/
我是一名优秀的程序员,十分优秀!