2012-06-27 23 views
7

chciałbym mieć pole tekstowe jak w polu tekstowym edytor wyrażeń w liczbach:Reklamowe pole tekstowe jak w liczbach

enter image description here

Jest bardzo podobny do NSTokenField, ale NSTokenField obsługuje tylko listę separator oddziela tokenów, np. pole "Do:" w aplikacji Mail.app.

enter image description here

muszę umieścić te znaki w tekście w określonych miejscach, ale poza tym mają one działają dokładnie jak NSTokenField (Backspace usuwa żeton, można przeciągnąć je wokół itd.).

Czy istnieje jakakolwiek kontrola 1. lub 3. strony, która robi coś takiego? Nic nie znalazłem.

Jeśli nie, jak zaleciłbyś wdrożenie? Użyj Core Text i wymyśl nowe koło (narzędzie NSTextField z lepszą obsługą znaczników)? Czy istnieje lepsze rozwiązanie?

Odpowiedz

5

Nie sądzę, że dostępna jest alternatywna kontrola dla NSTokenField (cóż, nie mogłem znaleźć ani kilka tygodni temu).

Ewentualną opcją może być zastosowanie rozwiązania przedstawionego w przykładowym projekcie Apple LayoutManagerDemo. To pokazuje podklasę o numerze NSTextView zdolną do wykrywania ruchu myszy nad tekstem. Zainstaluj i uruchom wersję demo, aby uzyskać podstawowy pomysł.

Próbka używa NSLayoutManager do wykrywania ruchu myszy, jednak kod mógł zostać prawdopodobnie zaadaptowany do wykrywania określonych sekwencji znaków w tekście, takich jak tokeny w polu tekstowym. Gdy masz tokeny i ich lokalizację od NSLocationManager, możesz wstawić własną reprezentację w oparciu o cechy swojego tokena. Możliwym rozwiązaniem może być użycie NSTextAttachmentCell, która stanie się glifem w tekście. Zaletą używania NSTextAttachmentCell jest to, że jest traktowany jak glif przez system tekstowy Cocoa (można go wybrać, następuje formatowanie itp.). Wdrażając drawWithFrame:inView:, możesz dodać różne widoczne atrybuty każdego tokena.