Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSTokenField选择列表在滚动时显示空白_Objective C_Macos_Cocoa_Nstokenfield - Fatal编程技术网

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

  • 将其委托设置为AppDelegate

  • 在实现文件中

     -(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问题。。。。为此提高了雷达。