NSTokenField不允许我输入tokenField以外的字符串:completionsForSubstring:.



我的问题是NSTokenField不允许我键入我想要的任何文本,它只允许我键入包含在NSArray中的字符串,tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:返回。

- (NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex      {
return [NSArray arrayWithObjects:@"AA", @"BB", @"CC", @"DD", nil];
}

我的NSTokenField只能包含上面的文本标记。例如,如果我输入XXX,它不会出现,也无法添加。

为什么会发生这种情况,因为文档提到"用户可以输入一个字符串,这个字符串不在可能的补全列表中,并且也被标记化了。"

我错过了什么

selectedItemIndex的默认值是0 -返回列表中的第一项。

如果substring没有出现在列表中,你需要将这个值设为-1(否则它会用你的第一个补全文本替换用户输入的文本)

只返回补全列表中与用户键入的前缀相符的内容。(这通常是正确的用户体验。)

- (NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex
{
   NSArray *completions = [NSArray arrayWithObjects:@"AA", @"BB", @"CC", @"DD", nil];
   NSMutableArray *filteredCompletions = [NSMutableArray array];
   [completions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
       if ([[obj lowercaseString] hasPrefix:[substring lowercaseString]])
           [filteredCompletions addObject:obj];
   }];
   return filteredCompletions;
}

相关内容

  • 没有找到相关文章

最新更新