2013-07-15 31 views
2

我有一個NSTokenField在按回車鍵創建令牌。我想限制此字段中的令牌數量。舉個例子,用戶應該被允許一個接一個地輸入2個令牌。之後,不應允許用戶設置令牌,也不允許用戶進一步搜索。總之,用戶應該在2個令牌後被阻塞。如何限制NSTokenField中的令牌數量?

任何人都可以幫助我實現這個嗎?

感謝提前:)

回答

0

如果您保存令牌分貝,你可以指望的特定用戶ID的行數,並添加一個if語句將其限制在2

+0

感謝您的回答,但它不是對完成列表的情況。限於令牌字段中存在的令牌。我想限制NSTokenField實例的objectValue。 ObjectValue包含所選標記的數量。 –

+0

@AbdulNaveed我認爲blo是在這裏的東西,爲什麼你不跟蹤什麼時候完成添加,然後開始沒有返回任何可能的完成 –

+0

可以同步發佈一些代碼?儘可能多的理解,你可以做一些事情,比如計數行數,並添加一個if語句,使其大於或等於2...if($ count> = 2){//做點什麼}' –

2

將該溶液在2份分爲:

-(NSArray *)tokenField:(NSTokenField *)tokenField shouldAddObjects:(NSArray *)tokens atIndex:(NSUInteger)index 
{ 
    //limit the tokens 
    if(self.tokensLimit) 
    { 
     NSArray * tokensArray = [_tokenField objectValue]; 

     if([tokensArray count] > 0) 
     { 
      if([tokens isEqualToArray:tokensArray]) 
      { 
       return tokens; 
      } 
      else if([tokensArray count]>=self.tokensLimit) 
      { 
       return @[]; 
      } 
      else if([tokens count]>0) 
      { 
       tokens = [tokens subarrayWithRange:NSMakeRange(0, MIN([tokens 
                     count], self.tokensLimit))]; 
      } 
      else 
       return @[]; 
     } 
     else 
     { 
      tokens = [tokens subarrayWithRange:NSMakeRange(0, MIN([tokens count], self.tokensLimit))]; 
     } 
    } 

    return tokens; 
} 

其中tokensLimit是int> 0 委託覆蓋了所有的情況下,像通過複製/粘貼,完成列表,拖動&下降,手寫等加入令牌..

這個其他代表涵蓋用戶寫的字符串,然後點擊「TAB」

- (BOOL)control:(NSControl *)control isValidObject:(id)object 
{ 
    if(self.tokensLimit) 
    { 
     NSArray * tokensArray = [_tokenField objectValue]; 
     tokensArray = [tokensArray subarrayWithRange:NSMakeRange(0, MIN([tokensArray count], self.tokensLimit))]; 
     [_tokenField setObjectValue:tokensArray]; 
    } 
    return YES; 
}