我有一個自定義的NSCell,裏面有各種元素(圖像,各種文本塊),其中一個文本塊可能有各種可點擊的鏈接。我有我的NSAttributedString正確識別鏈接並將它們着色爲藍色,但我無法弄清楚如何讓光標變成手,並允許用戶實際點擊它們。自定義NSCell中的可點擊鏈接
現在我已將我的屬性字符串繪製到顯然不可單擊的單元格中,但我不確定如何以任何其他方式添加它,因爲NSCell不會從NSView繼承。通常我只是添加一個NSTextField作爲子視圖,但在這種情況下我不能這樣做。
有什麼想法?
我有一個自定義的NSCell,裏面有各種元素(圖像,各種文本塊),其中一個文本塊可能有各種可點擊的鏈接。我有我的NSAttributedString正確識別鏈接並將它們着色爲藍色,但我無法弄清楚如何讓光標變成手,並允許用戶實際點擊它們。自定義NSCell中的可點擊鏈接
現在我已將我的屬性字符串繪製到顯然不可單擊的單元格中,但我不確定如何以任何其他方式添加它,因爲NSCell不會從NSView繼承。通常我只是添加一個NSTextField作爲子視圖,但在這種情況下我不能這樣做。
有什麼想法?
我能想到的唯一解決方案是通過手動命中測試和NSCell內的鼠標跟蹤。最難的部分(我沒有答案)是如何確定鏈接文本的矩形...希望有人可以回答這個問題?
一旦知道了url文本的矩形,就可以通過實現hitTestForEvent來實現點擊操作。我想你會這樣做;
// If the event is a mouse down event and the point is inside the rect trigger the url
- (NSUInteger)hitTestForEvent:(NSEvent *)event inRect:(NSRect)frame ofView:(NSView *)controlView {
NSPoint point = [controlView convertPoint:[event locationInWindow] fromView:nil];
// Check that the point is over the url region
if (NSPointInRect(point, urlFrame)) {
// If event is mousedown activate url
// Insert code here to activate url
return NSCellHitTrackableArea;
} else {
return [super hitTestForEvent:event inRect:frame ofView:controlView];
}
}
基於我決定去以下解決方案與艾拉·庫克和其他人談話:
如果一切按計劃進行,那麼我應該只在一個時間附着在NSTableView的1周的NSView和大部分時間都不在一切順利。我會回來報告我的結果,一旦我得到它的工作。
這是100%實施,並像一個魅力。關鍵是將NSTrackingArea添加到scrollview的可見部分,然後在NSTableView上轉換鼠標點並調用rowAtPoint:。然後,獲取返回行的矩形並將您的NSView放在那裏。完善。 – 2009-09-28 02:52:12
嗨邁克,你介意分享你寫的代碼來實現這個嗎? – user6325 2009-10-01 10:32:35
是的,請分享代碼.. – triandicAnt 2013-07-29 13:21:22