如何限制NSTokenField中的令牌数量?

问题描述:

我有一个NSTokenField在按回车键创建令牌。我想限制此字段中的令牌数量。举个例子,用户应该被允许一个接一个地输入2个令牌。之后,不应允许用户设置令牌,也不允许用户进一步搜索。总之,用户应该在2个令牌后被阻塞。如何限制NSTokenField中的令牌数量?

任何人都可以帮助我实现这个吗?

感谢提前:)

如果您保存令牌分贝,你可以指望的特定用户ID的行数,并添加一个if语句将其限制在2

+0

感谢您的回答,但它不是对完成列表的情况。限于令牌字段中存在的令牌。我想限制NSTokenField实例的objectValue。 ObjectValue包含所选标记的数量。 –

+0

@AbdulNaveed我认为blo是在这里的东西,为什么你不跟踪什么时候完成添加,然后开始没有返回任何可能的完成 –

+0

可以同步发布一些代码?尽可能多的理解,你可以做一些事情,比如计数行数,并添加一个if语句,使其大于或等于2...if($ count> = 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; 
}