gpt4 book ai didi

objective-c - 捕获在 NSTextField 中按下的 "up"和 "down"键

转载 作者:太空狗 更新时间:2023-10-30 03:23:32 25 4
gpt4 key购买 nike

我编写了一个“代理”Cocoa 应用程序,其中 TextField 位于状态图标的菜单中。图标菜单显示如下:


(来源:ifotos.pl)

步进器将值递增或递减 5。文本字段的目的是按“向上”或“向下”键,其结果与递增或递减 5 的值相同。

我发现必须使用以下代码 - (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelectorNSControlTextEditingDelegate协议(protocol)。

我目前遇到的问题是如何实现代码。我通常的做法是使用 sth.delegate = self; .我试图搜索答案,但回复包括使用 control:textView:... .即使进一步研究,我也无法学会如何使用委托(delegate)方法。

提前致谢!

最佳答案

您需要创建一个对象作为文本字段的委托(delegate)。这可以在代码中完成,或者如果合适的话,在 Interface Builder 中完成。您可能已经有一个 Controller 负责此字段和步进器控件,因此这是一个很好的选择。这个委托(delegate)对象是需要实现你提到的方法的对象:

- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector

此方法将在 field editor 时被调用* 对于文本字段,要求执行 NSResponder action messages 之一.字段编辑器询问它的委托(delegate),也就是文本字段,它应该做什么,而字段又询问它的委托(delegate),也就是你的对象。

commandSelector 参数包含操作消息的名称。因此,您可以测试您感兴趣的消息(在本例中为 moveUp:moveDown:)并拦截它们。您可以执行任何您喜欢的操作,并阻止字段编辑器或文本字段对消息进行操作。

- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor 
doCommandBySelector:(SEL)commandSelector {
if( commandSelector == @selector(moveUp:) ){
// Your increment code
return YES; // We handled this command; don't pass it on
}
if( commandSelector == @selector(moveDown:) ){
// Your decrement code
return YES;
}

return NO; // Default handling of the command

}

*简而言之,一个 NSTextView,它在文本字段处于事件状态时代表文本字段处理输入。

关于objective-c - 捕获在 NSTextField 中按下的 "up"和 "down"键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6648183/

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