2016-11-29 68 views
0

我被賦予了一個任意的NSAttributedString(從markdown解析,不是它在這裏很重要),它可能包含我想要在一個文本字段中點擊的URL NSTableView單元格。這些要求規定,如果用戶點擊URL,他們將被帶到默認瀏覽器。如果他們點擊單元格中的其他任何位置,我們會有默認行爲(顯示額外的信息彈出窗口)。需要使用NSTextView(或NSTextField)作爲可點擊的URL

我正在嘗試使用NSTextView來顯示內容。但是,單擊URL外部但在視圖內部選擇文本並吃點鼠標。使視圖不可選擇也不允許點擊URL。我也不是真的希望文本是可選的,但這是一個小問題。

所以...我決定讓我的視圖控制器成爲NSTextViewDelegate,這樣我就可以使用其中一些回調。但是,如果我將NSTextView的委託屬性設置爲「self」,我的應用就會崩潰。即使我沒有實現任何功能,即使它們都是可選的,也會發生這種情況。

我正在使用Swift 3並想知道這裏是否存在一些錯誤或其他問題?調用堆棧似乎正在發送textView:willChangeSelectionFromCharacterRanges:toCharacterRanges:消息,即使它沒有實現。順便說一句,實施這種方法也無濟於事。

任何幫助,或使用委託協議在Swift 3中的示例代碼將不勝感激。

這裏的崩潰,我得到通過簡單的設置上NSTextView委託屬性: Crash

按要求,下面的設置是委託的代碼。目前我只要在消息更改時就設置它。這顯然可以優化,但現在我只想看看它的工作。

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

已添加代碼。沒有太瘋狂的事情發生。 – RehcsifMit

回答

0

我從來沒有弄清楚爲什麼我會崩潰,但我能夠想出一個解決方法。我最初試圖使包含NSTextView的表格單元格的視圖控制器成爲委託。我改變它,以便單元格的視圖子類本身是委託,一切都很好。

我不明白,但它的工作原理,所以這是重要的。