Objective c NSTokenField选择列表在滚动时显示空白
使用Objective c NSTokenField选择列表在滚动时显示空白,objective-c,macos,cocoa,nstokenfield,Objective C,Macos,Cocoa,Nstokenfield,使用NSTokenField时,出现了一些奇怪的情况,如下图所示: 当我键入A时,将显示弹出窗口中的选择 我滚动了一下 再滚动一些,它就在可见区域的下方 这是所有表视图的行为。行后面的视图可见,但它会自动跳转到正常位置。但在这种情况下不是这样 它在邮件应用程序中运行良好,工作正常 我的实施是: 创建了一个NSTokenField 将其委托设置为AppDelegate 在实现文件中 -(NSArray *)tokenField:(NSTokenField *)tokenField comp
NSTokenField
时,出现了一些奇怪的情况,如下图所示:
当我键入A
时,将显示弹出窗口中的选择
我滚动了一下
再滚动一些,它就在可见区域的下方
这是所有表视图的行为。行后面的视图可见,但它会自动跳转到正常位置。但在这种情况下不是这样
它在邮件应用程序中运行良好,工作正常
我的实施是:
NSTokenField
-(NSArray *)tokenField:(NSTokenField *)tokenField completionsForSubstring:(NSString *)substring indexOfToken:(NSInteger)tokenIndex indexOfSelectedItem:(NSInteger *)selectedIndex{
return @[@"A",@"B",@"C"];
}
我怎样才能让它自动弹出或受到一些代码的限制?你在Mail.app中看到的不是真正的NSMenu(苹果作弊,令人震惊!)。事实证明,它实际上是一个自定义的NSTextField,链接到一个粘贴在透明窗口中的NSTableView
这是一个相当古老的技巧,可以绕过极其糟糕的
scrollWheel:
NSMenu版本,因为它碰巧实现了。是在NSMenu中粘贴滚动视图的成熟替代方法。您需要使用数组内容预测子字符串。这将列出精确匹配的记录(这是一个优点)。另一个是这样也可以避免滚动
您必须按照以下方式更改委托方法,这将解决问题
-(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]];
}
希望这会对您有所帮助。您是否尝试过将
selectionIndex
设置为-1
或1-3之间的值?@gaige:这将如何使其滚动回原始位置?selectionIndex将选择数组的值。您如何滚动它?你是朝哪个方向滚动的?向上和向下。。。。您可以创建一个项目,然后重试。请再次阅读我的问题。CodaFi的回答解释得很好,但他建议使用MMTokenField,我不能。我需要的东西,将自定义现有的NSTokenField与弹簧。我符合你的Mail.app与可访问性检查器,也与筏。我喜欢这个答案,但仍然存在NSTokenField问题。。。。为此提高了雷达。