gpt4 book ai didi

cocoa - 防止选择 NSTokenField 中的所有标记

转载 作者:行者123 更新时间:2023-12-03 16:17:15 24 4
gpt4 key购买 nike

有什么方法可以阻止 NSTokenField 在按 ENTER 键或使用 TAB 键向第一响应者发送信息时选择所有内容?

最佳答案

NSTokenField 是 NSTextField 的子类。没有简单、直接的方法来直接操作这些类的选择(除了 -selectText:,它选择所有类)。

要在它成为第一响应者时执行此操作,您需要对 NSTokenField 进行子类化(请记住将 XIB 中的字段类设置为自定义子类的类)并覆盖 -becomeFirstResponder,如下所示:

- (BOOL)becomeFirstResponder
{
if ([super becomeFirstResponder])
{
// If super became first responder, we can get the
// field editor and manipulate its selection directly
NSText * fieldEditor = [[self window] fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length], 0)];
return YES;
}
return NO;
}

此代码首先查看 super 是否回答"is"(并成为第一响应者)。如果是这样,我们知道它将有一个字段编辑器(一个 NSText 实例),我们可以直接操作其选择。因此,我们获取其字段编辑器并设置其选定范围(我将插入点放在带有 {lastchar, nolength} 范围的末尾)。

要在字段完成编辑(返回、跳出等)时执行此操作,请覆盖 -textDidEndEditing:,如下所示:

- (void)textDidEndEditing:(NSNotification *)aNotification
{
[super textDidEndEditing:aNotification];
NSText * fieldEditor = [[self window] fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length], 0)];
}

在这种情况下,当用户结束编辑时,此方法让 super 执行其操作,然后查看它是否仍然是第一响应者。如果是,则执行与上面相同的操作:将插入克拉放在字段的末尾。

请注意,此行为不是标准的并且是意外的。谨慎使用。

关于cocoa - 防止选择 NSTokenField 中的所有标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2995205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com