2012-06-27 37 views
7

Tôi muốn có một trường văn bản như trình biên tập biểu lĩnh vực văn bản trong số:trường văn bản Mã như trong số

enter image description here

Nó rất giống với NSTokenField, nhưng NSTokenField chỉ hỗ trợ một danh sách delimiter tách của các thẻ, như trường "Tới:" trong Mail.app.

enter image description here

tôi phải nhúng các thẻ vào văn bản tại các địa điểm cụ thể, nhưng nếu không có họ làm việc giống hệt như NSTokenField (backspace xóa một dấu hiệu, bạn có thể kéo chúng xung quanh vv).

Có bất kỳ kiểm soát của bên thứ nhất hoặc bên thứ ba nào thực hiện điều này không? Tôi không tìm thấy gì cả.

Nếu không, bạn khuyên bạn nên triển khai nó như thế nào? Sử dụng Core Text và tái tạo lại bánh xe (thực hiện NSTextField với sự hỗ trợ mã thông báo tốt hơn)? Hoặc là có một giải pháp tốt hơn?

Trả lời

5

Tôi không nghĩ rằng có một điều khiển thay thế có sẵn cho NSTokenField (tốt, tôi không thể tìm thấy một trong hai tuần trước).

Tùy chọn có thể là tuân theo giải pháp được trình bày trong dự án mẫu của Apple LayoutManagerDemo. Điều này cho thấy một lớp con của NSTextView có khả năng phát hiện chuyển động của chuột trên văn bản. Cài đặt và chạy bản trình diễn để có ý tưởng cơ bản.

Mẫu sử dụng NSLayoutManager để phát hiện chuyển động của chuột, tuy nhiên mã có thể được điều chỉnh để phát hiện chuỗi ký tự cụ thể trong văn bản, như mã thông báo trong trường văn bản của bạn. Khi bạn có mã thông báo và vị trí của họ từ NSLocationManager, bạn có thể chèn biểu diễn của riêng mình dựa trên các đặc điểm của mã thông báo của bạn. Một giải pháp có thể có thể là sử dụng NSTextAttachmentCell sẽ trở thành một hình tượng bên trong văn bản của bạn. Lợi ích của việc sử dụng NSTextAttachmentCell là nó được xử lý như một glyph bởi hệ thống văn bản của Cocoa (bạn có thể chọn nó, nó theo định dạng, vv). Bằng cách triển khai drawWithFrame:inView:, bạn có thể thêm các thuộc tính hiển thị khác nhau của từng mã thông báo.

Các vấn đề liên quan