使用NSTokenField
时会发生奇怪的事情,如下图所示:
当我输入A
时,会显示弹出窗口中的选择。
我滚动了
更多滚动,它在可见区域下方。
这是所有tableviews的行为。行后面的视图是可见的,但它会自动弹到正常位置。但不是在这种情况下。
邮件应用程序没问题,工作正常。
我的实施是:
创建了NSTokenField
。
将其委托设置为AppDelegate。
在实施文件
中 -(NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex{
return @[@"A",@"B",@"C"];
}
即使sample code from apple documentation行为也不正确。
如何通过某些代码使其自动弹簧或限制?
答案 0 :(得分:0)
你在Mail.app中看到的并不是真正的NSMenu(苹果作弊,令人震惊!)。事实证明,它实际上是一个自定义的NSTextField链接到一个透明窗口中的NSTableView。
绕过非常差的scrollWheel:
NSMenu恰好已经实现了,这是一个相当古老的技巧。 MTTokenField是一种成熟的替代品,可以将你的头发拉出来,试图在NSMenu中粘贴滚动视图。
答案 1 :(得分:0)
您需要使用数组内容来预测子字符串。这将列出完全匹配的记录(这是加号)。另一个是这将避免你滚动。
您必须通过以下方式更改委托方法,以解决问题。
-(NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex
{
NSArray *arrayContents = @[@"A",@"B",@"C"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[cd] %@", substring];
return [NSArray arrayWithArray:[arrayContents filteredArrayUsingPredicate:predicate]];
}
希望这会对你有所帮助。