2010-11-22 6 views
14

जब मेल के NSTokenField एक मिल के इस में एक अमान्य ईमेल में प्रवेश (एक टोकन और सादे स्ट्रिंग के मिश्रण को महत्व देता):एनएसटीकेनफ़िल्ल्ड, संभव है?

alt text

कोई सिफ़ारिश लायक तरीका यह है है?
क्या इसके लिए NSTokenField भी सही उपकरण है? या मैं इसका दुरुपयोग करूँगा?

इस विशेष परियोजना में मैं उपयोगकर्ता पूर्वनिर्धारित टोकन समर्थन के साथ एक फ़ाइल नाम पैटर्न
(कई अन्य उपयोग के मामलों हालांकि देखते हैं) दर्ज करने के लिए, अनुमति देने के लिए की जरूरत है।

अभी मैं इनपुट की आवश्यकता होती है कर रहा हूँ इस तरह दर्ज किए जाने की:

Glue Text %[Tag]Other Glue Text%[Another Tag]More Text 

मैं कुछ मूर्ख प्रूफ इस तरह ग्राफिकल समाधान को यह बदलना चाहते हैं: हमेशा alt text

NSTokenField (!) टेक्स्ट टोकन में बदल जाता है।

या तो मैं अपने वेब खोजों में गलत कीवर्ड का उपयोग कर रहा हूँ,
या मैं वास्तव में इस (मिश्रित) व्यवहार की जरूरत के लिए सबसे पहले कर रहा हूँ ?!

मैंने ऐप्पल की एनएसटीकेनफ़िल्ल्ड गाइड के माध्यम से पढ़ा था, लेकिन मेरी समस्या पर कोई जानकारी नहीं मिली।

उत्तर

12

टोकन के लिए NSRoundedTokenStyle या अन्य पाठ के लिए को वापस करने के लिए आपको प्रतिनिधि विधि tokenField:styleForRepresentedObject: को लागू करने की आवश्यकता है। टोकन के लिए प्रतिनिधित्व ऑब्जेक्ट टोकन स्ट्रिंग स्वयं है, जब तक कि आपका प्रतिनिधि अन्य ऑब्जेक्ट्स न लौटाए।

यह आपके मामले के लिए चाल करना चाहिए:

- (NSTokenStyle)tokenField:(NSTokenField *)tokenField 
styleForRepresentedObject:(id)representedObject 
{ 
    if ([representedObject rangeOfString: @"%["].location == 0) { 
     return NSRoundedTokenStyle; 
    } else { 
     return NSPlainTextTokenStyle; 
    } 
} 
+0

धन्यवाद, यही वह है! – Regexident

2

असल में, आपको पहले एक tokenizing चरित्र है, जो अपने मामले में% होगा निर्धारित करने की

[tokenField setTokenizingCharacterSet:[NSCharacterSet characterSetWithCharactersInString:@"%%"]]; 

इनपुट स्ट्रिंग की जरूरत है साथ ही साथ बदल दिया गया:

गोंद पाठ% [टैग]% अन्य गोंद पाठ% [एक और टैग]% अधिक टेक्स्ट

... ताकि कोको जानता है कि टोकन समाप्त होता है।

- (NSTokenStyle)tokenField:(NSTokenField *)tokenField 
displayStringForRepresentedObject:(id)representedObject 
{ 
    if ([representedObject rangeOfString: @"["].location == 0) { 
     return [(NSString*)representedObject substringWithRange:NSMakeRange(1, [(NSString*)representedObject length]-2)]; 

    return representedObject; 
} 

बहरहाल, यह एक बड़ा दोष यह है: अगर आप कॉपी या बस

और तुम [टैग] चाहते हैं, तो टोकन क्षेत्र में टैग के रूप में प्रदर्शित करने के लिए, आप भी tokenField:displayStringForRepresentedObject: विधि लागू करने की आवश्यकता टोकन को ले जाएं, कोको tokenField:displayStringForRepresentedObject: पर कॉल करेगा और प्रतिलिपि/स्थानांतरित टोकन को टोकन [टैग] के बजाय नियमित टेक्स्ट टैग में बदल दिया जाएगा।

अगर किसी को उपरोक्त समस्या का समाधान है, तो मुझे इसे पढ़ने में खुशी होगी।

+0

आपको प्रतिनिधि विधि को कार्यान्वित करने की आवश्यकता है - (BOOL) टोकनफ़िल्ल्ड: (NSTokenField *) टोकनफ़िल्ल्ड लिखने के लिए प्रस्तुत किए गए ऑब्जेक्ट्स: (NSArray *) ऑब्जेक्ट्स पेस्टबोर्ड: (NSPasteboard *) pboard – Pol

संबंधित मुद्दे