我给了一个任意的NSAttributedString(从markdown解析,而不是在这里重要),它可能包含我希望在NSTableView单元格的文本字段中可点击的URL。要求规定,如果用户单击该URL,则使用默认浏览器将其带到该URL。如果他们点击单元格中的任何其他位置,我们会有默认行为(显示其他信息弹出窗口)。
我正在尝试使用NSTextView来显示内容。但是,单击URL外部但在视图中选择文本并单击鼠标。使视图无法选择也不允许单击URL。我也不是真的希望文本可以选择,但这是一个小问题。
所以...我决定让我的视图控制器成为NSTextViewDelegate,所以我可以使用其中的一些回调。但是,如果我将NSTextView的委托属性设置为“self”,我的应用程序崩溃了。即使我没有实现任何功能,即使它们都是可选的,也会发生这种情况。
我正在使用Swift 3并想知道是否存在某些错误或其他问题?调用堆栈似乎正在发送textView:willChangeSelectionFromCharacterRanges:toCharacterRanges:
消息,即使它未实现。顺便说一句,实施该方法也无济于事。
使用委托协议的Swift 3中的任何帮助或示例代码都将非常感激。
根据请求,这是设置委托的代码。目前我只是在消息发生变化时设置它。这显然可以优化,但现在我只想看到它的工作。
var notification: SSNotification! {
didSet {
guard let notificationCellView = self.view as? SSNotificationCellView else { return }
notificationCellView.subjectLabel.stringValue = notification.subject
if let description = notification.message , description != "" {
let attrString = TSMarkdownParser.standard().attributedString(fromMarkdown: description)
notificationCellView.messageLabel.textStorage?.setAttributedString(attrString)
notificationCellView.messageLabel.isHidden = false
notificationCellView.messageLabel.delegate = self
} else {
notificationCellView.messageLabel.isHidden = true
}
}
}
答案 0 :(得分:0)
我从未弄清楚为什么我会崩溃,但我能够想出一个解决方法。我原本试图使包含NSTextView的表格单元的视图控制器成为委托。我改变了它,以便单元格的视图子类本身就是委托,一切都很好。
我不明白,但它有效,所以这才是最重要的。