Tôi đang phát triển ứng dụng Mac trong XCode. Tôi cần phải thêm một siêu liên kết điều hướng đến một trang web cụ thể. Tôi đã thử điều này bằng cách sử dụng một nút, nhưng tôi cần phải biết làm thế nào để thay đổi con trỏ để con trỏ tay khi chuột là trên nút đó.Siêu kết nối trong Cocoa
Trả lời
Tôi tin rằng bạn có thể sử dụng NSTextField không thể chỉnh sửa để hiển thị URL. Nếu bạn đặt các thuộc tính một cách thích hợp trên NSAttributedString mà bạn đặt làm thuộc tính giá trị của trường, nó sẽ hiển thị dưới dạng tiêu chuẩn màu xanh-với-gạch chân và xử lý theo dõi con trỏ cho bạn. This Apple Q & A cho bạn biết cách đặt thuộc tính cho URL.
Để đặt con trỏ, bạn phải sử dụng phương pháp theo dõi con trỏ addCursorRect:cursor:
. Tuy nhiên, bạn thực sự chỉ cần gọi phương thức đó từ bên trong phương thức resetCursorRects
. Nếu bạn làm điều đó vào bất kỳ thời điểm nào khác, về cơ bản nó được bảo đảm để bị bỏ qua.
Vì vậy, đây có nghĩa là bạn cần phải phân lớp NSButton
(hoặc bất kỳ NSView
lớp con bạn muốn sử dụng) và ghi đè resetCursorRects
gọi addCursorRect:cursor:
cho toàn bộ quan điểm của bounds
.
Làm việc đối với tôi một cách hoàn hảo, cảm ơn. Tôi đã phân lớp NSTextField. –
Tôi muốn đưa ra một câu trả lời được cập nhật cho bất cứ ai tình cờ gặp vấn đề này tiếp theo.
Tôi thấy rằng khi tôi thử giải pháp được chỉ định bởi Apple Q & A trong câu trả lời của Barry, rằng văn bản của liên kết nhãn của tôi sẽ co lại khi được nhấp. Sau khi một số gỡ lỗi, tôi đã tìm ra rằng mã mẫu trên bài viết của Apple đã thiết lập một chuỗi được phân bổ mới, nhưng không bảo tồn bất kỳ thuộc tính ban đầu nào trên điều khiển nhãn để bắt đầu. Giải pháp là chỉ cần bắt đầu với một bản sao của chuỗi phân bổ ban đầu của nhãn, thêm các thuộc tính siêu liên kết mới, và sau đó cập nhật nhãn.
Tôi đã tạo một hàm trợ giúp đơn giản để biến nhãn NSTextField thành siêu kết nối. Về cơ bản nó củng cố giải pháp trên trang của Apple mà không cần thêm phần mở rộng danh mục vào NSAttributeString.
// 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];
}
Và sau đó để gọi nó, vượt qua NSTextField và chuỗi url vào nó đôi khi cửa sổ khởi:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self updateControl:_label withHyperlink:@"http://www.stackoverflow.com"];
}
- 1. Siêu liên kết Cocoa iPhone
- 2. Tạo siêu kết nối trong một ô Excel?
- 3. Tạo siêu kết nối bên trong một TextBlock
- 4. Ví dụ sử dụng Siêu kết nối trong WPF
- 5. Tìm siêu kết nối bên trong tài liệu PDF?
- 6. Làm thế nào để tạo siêu kết nối bằng XSLT?
- 7. Thêm cột siêu kết nối cho điều khiển DataGrid Winforms
- 8. Siêu kết nối XJC và siêu lớp chỉ dành cho tất cả các lớp?
- 9. Siêu liên kết trong Android
- 10. Thêm siêu kết nối trong Excel [2007] trong C# - Trong Excel nó tự
- 11. Tại sao kiểu siêu kết nối không xếp tầng trong CSS?
- 12. Cách tạo Siêu liên kết trong MessageBox.show?
- 13. Siêu liên kết ô trong Winforms DataGridView
- 14. Siêu văn bản/chỉ số trong siêu liên kết trong WPF
- 15. Tạo siêu liên kết trong điều khiển TextBox
- 16. Siêu liên kết WPF chỉ hoạt động trong các trang?
- 17. siêu liên kết nhãn Graphviz
- 18. Kết nối Perl Kết nối
- 19. Làm cách nào để thêm siêu kết nối vào Hộp thoại JFace
- 20. Có bao nhiêu kết nối trong nhóm kết nối ADO.NET
- 21. Kết nối trọn đời = 0 trong chuỗi kết nối MySql
- 22. Thiếu kết nối trong hồ bơi kết nối jdbc tomcat
- 23. Tại sao kết nối khung thực thể yêu cầu thuộc tính siêu dữ liệu?
- 24. iOS 5 JSON Parsing Kết quả trong Cocoa Lỗi 3840
- 25. nodejs kết nối kết nối net
- 26. Siêu liên kết PDF trên iPhone/iPad
- 27. Quy tắc chính tả StyleCop và siêu liên kết
- 28. Tạo NSScrollView Programatically trong một NSView - Cocoa
- 29. Thêm siêu liên kết đến WPF WPF
- 30. thay đổi màu siêu liên kết uitextview
Vấn đề duy nhất với ghi chú công nghệ Apple này là con trỏ chuột vẫn thay đổi con trỏ kiểu nhập văn bản I-beam khi di chuột qua. –
Một vấn đề nữa là việc nhấp vào liên kết sẽ thay đổi phông chữ của NSTextField thành mặc định của hệ thống. Các sửa chữa sau đây trục trặc cho tôi bằng cách buộc văn bản kế thừa phông chữ của trường văn bản: '[attString addAttribute: NSFontAttributeName value: [label font] range: NSMakeRange (0, [attString length])];' –