2011-06-15 20 views
8

Apple geçerlidir doğrulamak için nasıl sahip elverişli bir NSTokenField ekleniyor yeni belirteçleri geçerli olduğunu kontrol etmenizi sağlayan bir geri arama yöntemi yarattı ve bir durumda hariç, harika çalışıyor. Kullanıcı bir belirteçle yazmaya başlar, ancak belirteci yazmayı tamamlamamışsa ve kullanıcı SEKME tuşuna basarsa, doğrulama yöntemi çağrılmaz.tüm belirteçleri bir NSTokenField

Bu, girilen tüm simgelerin, kullanıcının doğrulama işlemini atlamak için sekmeye bastığında çalışmadığı sürece geçerli olduğundan emin olduğum anlamına gelir.

Bu durumun üstesinden gelmenin doğru yolunun ne olduğunu bilen var mı?

cevap

7

Bir süre denedim ve belirteç alanının Denetim: isValidObject: Sekme tuşuna basıldığında, NSControlTextEditingDelegate protokolünün denetimini aradığını buldum. 'Nesne' parametresi tamamlanmamış belirteci içeriği olan bu tür

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

olarak Yani bir temsilci yöntemi uygulayabilir. Yöntem NO döndürürse, jeton geçerli belirteç dizisine eklenmez.

2

Ayrıca bu sorunla uğraşıyorum ve kontrolün kullanılmasının: zonble tarafından önerilen isValidObject öğesinin neredeyse çözüme ulaştığını, ancak nesne parametresine bağlı olarak HAYIR veya EVET'i döndürüp döndürmeyeceğini belirlemenin zor olduğunu buldum. Bu sorunun sadece sekme anahtarıyla sınırlı olduğunu söyleyebildiğim için bir çift yöntemi şu şekilde uygulamıştım;

bu korkunç çirkin olduğunu fark ama ben NSTokenField (yeni bir pozisyona vb imleci hareket örn) NSTokenField diğer NSTextField davranışları üzerine çarpan değilken sekmesinde belirteçleri yaratmaktan kaçınmak için alabilir tek yolu.

- (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;   
} 
İlgili konular