私はXCodeでMacアプリケーションを開発しています。私は、特定のサイトに移動するハイパーリンクを追加する必要があります。私はこれをボタンを使って試しましたが、マウスがそのボタンの上にあるときにカーソルをハンドカーソルに変更する方法を知る必要があります。Cocoaのハイパーリンク
答えて
私はあなたがURLを表示するために編集不可能なNSTextFieldを使うことができると信じています。フィールドのvalueプロパティとして設定したNSAttributedStringに適切に属性を設定すると、標準の青色の下線として表示され、カーソル追跡が処理されます。 This Apple Q & Aは、URLの属性を設定する方法を示します。
カーソルを設定するには、カーソル追跡方法addCursorRect:cursor:
を使用する必要があります。しかし、あなたは実際にはresetCursorRects
メソッドの中からそのメソッドを呼び出すことになっています。それ以外の場合は、基本的に無視されることが保証されています。
だから、これはあなたがNSButton
(または任意NSView
サブクラス使用したい)をサブクラス化して、ビュー全体のbounds
ためaddCursorRect:cursor:
を呼び出すためにresetCursorRects
を上書きする必要があるということです。
は、完全に私のためのおかげで勤務しました。私はNSTextFieldをサブクラス化しました。 –
私はこれを次の誰かのために更新された答えに投げたいと思います。
Apple Q & Aで指定されたソリューションをBarryの答えで試したところ、クリックしたときにラベルリンクのテキストが縮小することがわかりました。いくつかのデバッグの後、アップルの記事のサンプルコードが新しい属性付き文字列を設定していたが、ラベルコントロールの元の属性をそのまま残していないことがわかった。解決方法は、ラベルの元の属性付き文字列のコピーから開始し、新しいハイパーリンクプロパティを追加し、ラベルを更新することです。
NSTextFieldラベルをハイパーリンクに変換する簡単なヘルパー関数を作成しました。基本的には、NSAttributeStringにカテゴリ拡張機能を追加する必要なく、Appleのページにソリューションを統合します。
// Converts an otherwise plain NSTextField label into a hyperlink
-(void)updateControl:(NSTextField*)control withHyperlink:(NSString*)strURL
{
// both are needed, otherwise hyperlink won't accept mousedown
[control setAllowsEditingTextAttributes: YES];
[control setSelectable: YES];
NSURL* url = [NSURL URLWithString:strURL];
NSAttributedString* attrString = [control attributedStringValue];
NSMutableAttributedString* attr = [[NSMutableAttributedString alloc] initWithAttributedString:attrString];
NSRange range = NSMakeRange(0, [attr length]);
[attr addAttribute:NSLinkAttributeName value:url range:range];
[attr addAttribute:NSForegroundColorAttributeName value:[NSColor blueColor] range:range ];
[attr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:range];
[control setAttributedStringValue:attr];
}
そして、それを起動し、ウィンドウが初期化さいつか時にNSTextFieldとURL文字列を渡す:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self updateControl:_label withHyperlink:@"http://www.stackoverflow.com"];
}
- 1. ハイパーリンク
- 2. cocoaドキュメントベースのアプリケーション
- 3. スクリプティングのCocoaアプリケーション
- 4. Cocoaのローカリゼーションアップデート
- 5. Cocoaのループアクション
- 6. Cocoaアプリケーションのカスタムレコードビュー
- 7. Cocoaオブジェクトのリンクリスト
- 8. Cocoa(Mac)のヒットテストテキスト?
- 9. ObjC + Cocoaのコールバック
- 10. Cocoa/Cocoa Touchでディレクトリを監視する
- 11. Cocoaフレームワークロール
- 12. Cocoaカレンダーチューザー
- 13. Cocoaフォーカスリングカラーアニメーション
- 14. Cocoaアプリケーションプラグイン
- 15. CGAffineTransformMakeScale cocoa?
- 16. Cocoa forControlEvents:WHATGOESHERE
- 17. Cocoaフレームワークの作成と別のCocoaプロジェクトからの使用
- 18. jqueryブックレットプラグインのハイパーリンク
- 19. フィルターのハイパーリンク - パイソン
- 20. ハイパーリンクのソートデータベース
- 21. 行間のハイパーリンク
- 22. RecyclerViewのハイパーリンクtextview
- 23. ボタン内のハイパーリンク
- 24. web.pyのハイパーリンク
- 25. ボタン内のハイパーリンク
- 26. wpfのハイパーリンク
- 27. SSMSクエリウィンドウのハイパーリンク
- 28. TextBlockのハイパーリンク
- 29. LightGallery.jsのハイパーリンク
- 30. ハイパーリンクAlertDialogの中
このAppleのテクニカルノートの唯一の問題は、マウスカーソルがI-beamテキスト入力スタイルのカーソルにマウスオーバーしても変わるということです。 –
もう一つの問題は、リンクをクリックすると、NSTextFieldのフォントがシステムのデフォルトに変更されることです。以下は、テキストフィールドのフォントを継承するようにテキストを強制することで、私の不具合を修正します: '[attString addAttribute:NSFontAttributeName value:[label font] range:NSMakeRange(0、[attString length])];' –