3

私は過去数日間、カスタム描画された NSCell でリンクを許可することを読んで実験してきましたが、基本的に何も使用できませんでした。各アプローチには常に問題があります。

これを行う方法を知っている人はいますか?

- (void)drawInteriorWithFrame:(NSRect)theCellFrame inView:(NSView *)theControlViewm を使用して NSCell をカスタム描画しています

NSCell は高さが可変のテキスト ブロックであり、その中にリンクが含まれています。一部のセルにはリンクがあり、一部のセルにはリンクがありません。

NSLinkAttributeName で nsattributedstring を使用してみました

セルへのすべてのヒットをインターセプトしてから、クリックした場所とテキスト内のリンクの場所を一致させようとしましたが、うまくいきません。

私は基本的にすべてのボードで見つけることができるすべての提案を試しましたが、ほとんどのコメントは古いので、誰かがこれを行う良い方法を考え出したことを願っています.

ありがとう、デビッド

4

1 に答える 1

-1

私はこれを正確に試したことはありませんが、これを試してみてください:

まず、ハイパーリンクには NSAttributedString のカテゴリを使用します。これは、Apple 開発者ドキュメントのこの投稿に似ています。この例では、NSAttributedString 'hyperlinkFromString:withURL:` のメソッドを示しています。

次に、テーブルのデリゲートを作成し、tableView:willDisplayCell:forTableColumn:row:メソッドを実装します。

その方法では、

setAttributedStringValue:[NSAttributedString hyperlinkFromString:YOUR_STRING withURL:YOUR_URL]

または、ハイパーリンクされていない文字列テキストも必要な場合は、

setAttributedStringValue:[SOME_NON_HYPERLINKED_STRING appendAttributedString:[NSAttributedString hyperlinkFromString:YOUR_STRING withURL:YOUR_URL]]

それが NSCell をカスタム描画する唯一の理由である場合は、NSTextFieldCell で動作するはずのカスタム クラスを削除してみてください。ただし、テキスト フィールドのセルで属性付き文字列を中央に配置するのに問題がある人もいることをオンラインで見たので、問題なく動作することを願っています。もう 1 つの注意点: デリゲート メソッドでは、すべての条件に対して変更するセル属性を必ず設定してください。私は引用します:

aCell は aTableColumn のすべての行で再利用されるため、デリゲートは特別なセルを描画するときと通常のセルを描画するときの両方で表示属性を設定する必要があります。

「http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSTableViewDelegate_Protocol/Reference/Reference.html」から (申し訳ありませんが、StackOverflow ではまだ複数のハイパーリンクを投稿できません)

お役に立てれば。

于 2011-01-10T18:28:51.803 に答える