我被賦予了一個任意的NSAttributedString(從markdown解析,不是它在這裏很重要),它可能包含我想要在一個文本字段中點擊的URL NSTableView單元格。這些要求規定,如果用戶點擊URL,他們將被帶到默認瀏覽器。如果他們點擊單元格中的其他任何位置,我們會有默認行爲(顯示額外的信息彈出窗口)。需要使用NSTextView(或NSTextField)作爲可點擊的URL
我正在嘗試使用NSTextView來顯示內容。但是,單擊URL外部但在視圖內部選擇文本並吃點鼠標。使視圖不可選擇也不允許點擊URL。我也不是真的希望文本是可選的,但這是一個小問題。
所以...我決定讓我的視圖控制器成爲NSTextViewDelegate,這樣我就可以使用其中一些回調。但是,如果我將NSTextView的委託屬性設置爲「self」,我的應用就會崩潰。即使我沒有實現任何功能,即使它們都是可選的,也會發生這種情況。
我正在使用Swift 3並想知道這裏是否存在一些錯誤或其他問題?調用堆棧似乎正在發送textView:willChangeSelectionFromCharacterRanges:toCharacterRanges:
消息,即使它沒有實現。順便說一句,實施這種方法也無濟於事。
任何幫助,或使用委託協議在Swift 3中的示例代碼將不勝感激。
這裏的崩潰,我得到通過簡單的設置上NSTextView委託屬性:
按要求,下面的設置是委託的代碼。目前我只要在消息更改時就設置它。這顯然可以優化,但現在我只想看看它的工作。
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
}
}
}
已添加代碼。沒有太瘋狂的事情發生。 – RehcsifMit