2011-06-15 12 views
8

एप्पल में मान्य हैं आसानी से एक कॉलबैक विधि आप यह देखना होगा कि नया टोकन है कि एक NSTokenField जोड़े जा रहे हैं मान्य हैं अनुमति देता है बनाया है , और यह पता चला है कि यह एक मामले में के अलावा महान काम करता है। उपयोगकर्ता एक टोकन में टाइप शुरू होता है, लेकिन अभी तक टोकन टाइपिंग पूरा नहीं किया है, और उपयोगकर्ता टैब कुंजी प्रेस, सत्यापन विधि कहा जाता है नहीं है।मान्य करने के लिए कैसे सभी टोकन एक NSTokenField

इसका मतलब है कि मैं यह सुनिश्चित करने में सक्षम हूं कि दर्ज किए गए सभी टोकन वैध हैं जब तक कि उपयोगकर्ता काम नहीं करता है, वे सत्यापन को बाईपास करने के लिए टैब दबा सकते हैं।

किसी को भी सही तरीका क्या संभाल करने इस स्थिति है पता है?

उत्तर

7

मैंने थोड़ी देर के लिए प्रयास किया और मुझे पता चला कि टोकन फ़ील्ड नियंत्रण को कॉल करता है: isValidObject: टैब कुंजी दबाए जाने पर NSControlTextEditingDelegate प्रोटोकॉल का है। तो आप एक प्रतिनिधि विधि जैसे

- (BOOL)control:(NSControl *)control isValidObject:(id)object 
{ 
    NSLog(@"control:%@", control); 
    NSLog(@"object:%@", object); 
    return NO; 
} 

'ऑब्जेक्ट' पैरामीटर आपके अपूर्ण टोकन की सामग्री है। विधि नहीं देता है, तो टोकन मान्य टोकन की सरणी को शामिल नहीं किया जाएगा।

2

मैं इस समस्या से भी जूझ रहा हूं और पाया कि नियंत्रण का उपयोग करना: zonble द्वारा सुझाए गए अनुसार ValidObject लगभग समाधान तक पहुंच जाता है, लेकिन यह निर्धारित करना मुश्किल है कि ऑब्जेक्ट पैरामीटर के आधार पर NO या YES को वापस करना है या नहीं। जहाँ तक मेरा केवल टैब कुंजी के रूप में निम्नानुसार तो मैं तरीकों की एक जोड़ी कार्यान्वित तक ही सीमित है इस समस्या बता सकते हैं;

मुझे एहसास है कि यह बहुत बदसूरत है, लेकिन एनएसटीकेनफ़िल्ल्ड के अन्य एनएसटीक्स्टफिल्ल्ड व्यवहारों (उदाहरण के लिए कर्सर को एक नई स्थिति आदि में ले जाने) पर इंपिंग करते समय मैं टैब पर टोकन बनाने से बचने के लिए एनएसटीकेनफ़िल्ल्ड प्राप्त कर सकता हूं।

- (BOOL)control:(NSControl *)control isValidObject:(id)object 
{ 
    if (self.performingTab) { 
     self.performingTab=NO; 
     return NO; 
    } else { 
     return YES; 
    } 
} 

- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor 
doCommandBySelector:(SEL)commandSelector 
{   
    if ([email protected](insertTab:)) { 
     self.performingTab=YES; 
    }   
    return NO;   
}