Cocoa 如何限制NSTokenField中令牌的数量?
我有一个NSTokenField,在这里,在按enter键时会创建令牌。我想限制此字段中令牌的数量。比如说,应该只允许用户一个接一个地输入2个令牌。稍后,不应允许用户设置令牌,也不应允许用户进一步搜索。简而言之,应该在2个令牌之后阻止用户 有谁能帮我做到这一点吗Cocoa 如何限制NSTokenField中令牌的数量?,cocoa,nstokenfield,Cocoa,Nstokenfield,我有一个NSTokenField,在这里,在按enter键时会创建令牌。我想限制此字段中令牌的数量。比如说,应该只允许用户一个接一个地输入2个令牌。稍后,不应允许用户设置令牌,也不应允许用户进一步搜索。简而言之,应该在2个令牌之后阻止用户 有谁能帮我做到这一点吗 提前感谢:)如果您将令牌保存在db中,您可以计算特定用户id的行数,并添加If语句将其限制为2。解决方案分为两部分: -(NSArray *)tokenField:(NSTokenField *)tokenField shouldAdd
提前感谢:)如果您将令牌保存在db中,您可以计算特定用户id的行数,并添加If语句将其限制为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;
}
其中,它是一个大于0的整数
该委托涵盖所有情况,如通过复制/粘贴添加的令牌、完成列表、拖放、手动写入等
另一个委托涉及用户编写字符串并点击“TAB”的情况
瞧:
var maximumTokens: Int = 2
func tokenField(_ tokenField: NSTokenField, shouldAdd tokens: [Any], at index: Int) -> [Any] {
var count = 0
if let textView = tokenField.currentEditor() as? NSTextView {
for scalar in textView.string.unicodeScalars {
if scalar.value == unichar(NSAttachmentCharacter) {
count += 1
}
}
}
return tokens.filter({ _ in
count += 1
return count <= maximimTokens
})
}
var-maximumTokens:Int=2
func tokenField(tokenField:NSTokenField,shouldAdd tokens:[Any],位于索引:Int)->[Any]{
变量计数=0
如果让textView=tokenField.currentEditor()作为?NSTextView{
对于textView.string.unicodeScalars中的标量{
如果scalar.value==unichar(NSAttachmentCharacter){
计数+=1
}
}
}
返回令牌。筛选器({uu}in
计数+=1
return count谢谢您的回答,但这与完成列表无关。请限制标记字段中存在的标记。我想限制NSTokenField实例的objectValue。objectValue包含所选标记的数量。@AbdulNaveed我想blo在这里有些问题,为什么不跟踪何时添加完成,然后启动ret如果($count>=2){//do something}
我不想限制完成列表的计数。我说的是NSTokenField中的标记。
var maximumTokens: Int = 2
func tokenField(_ tokenField: NSTokenField, shouldAdd tokens: [Any], at index: Int) -> [Any] {
var count = 0
if let textView = tokenField.currentEditor() as? NSTextView {
for scalar in textView.string.unicodeScalars {
if scalar.value == unichar(NSAttachmentCharacter) {
count += 1
}
}
}
return tokens.filter({ _ in
count += 1
return count <= maximimTokens
})
}