- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现一个 NSTextField,当我点击它时,它会选择所有文本。 (让用户轻松删除所有当前文本)当我完成编辑时,通过按 enter/tab 键或将鼠标移出它的矩形,我会将焦点移出该字段,并将其 alpha 值更改为 0.5。
我的代码:
H文件:
#import <Foundation/Foundation.h>
@interface MoodMsgTextField : NSTextField<NSTextFieldDelegate>
@end
M文件:
-(BOOL) becomeFirstResponder
{
NSLog(@"become first responder");
BOOL result = [super becomeFirstResponder];
if(result)
{
[self setAlphaValue:1.0];
[self performSelector:@selector(selectText:) withObject:self afterDelay:0];
}
return result;
}
-(BOOL) refusesFirstResponder
{
return NO;
}
-(BOOL) resignFirstResponder
{
NSLog(@"resigning first responder");
BOOL result = [super resignFirstResponder];
NSText* fieldEditor = [self.window fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange(0,0)];
[fieldEditor setNeedsDisplay:YES];
[self setAlphaValue:0.5];
return result;
}
-(void)awakeFromNib
{
self.delegate = self;
[self setAlphaValue:0.5];
[self setBordered:YES];
[self setWantsLayer:YES];
self.layer.borderWidth = 0.5;
self.layer.borderColor = [[NSColor grayColor] CGColor];
}
- (void)controlTextDidChange:(NSNotification *)aNotification
{
NSLog(@"the text is %@",self.stringValue);
}
- (void)controlTextDidEndEditing:(NSNotification *)aNotification
{
NSLog(@"end editiing : the text is %@",self.stringValue);
[self.window makeFirstResponder:nil];
}
- (void)mouseEntered:(NSEvent *)theEvent
{
[self setWantsLayer:YES];
self.layer.borderWidth = 0.5;
self.layer.borderColor = [[NSColor grayColor] CGColor];
}
- (void)mouseExited:(NSEvent *)theEvent
{
[self setWantsLayer:YES];
self.layer.borderWidth = 0;
}
所以,我有几个问题:
1.
当我在 NSTextField 中按下时(当焦点在外面时)它立即变成并退出第一响应者并且我得到编辑结束消息。这是为什么 ?我点击的日志是这样的:
2011-08-02 18:03:19.044 ooVoo[42415:707] become first responder
2011-08-02 18:03:19.045 ooVoo[42415:707] resigning first responder
2011-08-02 18:03:19.104 ooVoo[42415:707] end editing : the text is
2.
当我按下回车键时,它只会选择里面的所有文本,不会移动鼠标焦点。当我按下选项卡时,似乎确实移动了焦点,但是这两者都不会导致 resignFirstResponder 被调用。为什么?
3.没有一个鼠标事件函数被调用。我需要为此做一些特别的事情吗?我认为既然它们是 NSResponder 的,我将通过从 NSTextField 继承来免费获得它们。我在这里也需要 NSTrackingInfo 吗?
4.
最后但同样重要的是,出于某种原因,每隔几个字母,一个字母似乎是粗体。我不知道为什么。
如果有任何帮助,我将不胜感激。谢谢
最佳答案
我不确定为什么在这种情况下会发生这种情况,但您应该阅读 Field Editor概念。基本上 NSTextField 不处理自己的输入,而是使用称为字段编辑器的 NSTextView 来接受输入。
您需要自己对 Enter 键使用react。看看 key handling documentation .这是一个 answer with an example .
要获取鼠标事件,您可以使用 NSTrackingArea。请参阅 Mouse Tracking 的文档.
我对此没有任何意见,除了有时文本绘制看起来很粗,而实际上发生的是多次绘制文本而不删除背景。
关于objective-c - NSTextField 事件和辞职第一响应者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6914409/
希望有人能帮我解决这个问题。我有一个带有 3 个文本字段的 UIView。我希望键盘上的“返回”键让第一响应者辞职,无论用户光标在哪个文本字段中。我的代码适用于 3 个文本字段中的 2 个,但始终(一
目前我正在使用私有(private) keystore 文件签署 apk,但我想用不同的 keystore 文件签署该 apk。我怎样才能辞职那个apk..? 最佳答案 您可以使用不同的 keysto
我的代理机构使用第 3 方为我们的网站构建移动应用程序。目前我正在尝试使用本教程重新签署应用程序:http://dev.mlsdigital.net/posts/how-to-resign-an-io
我是一名优秀的程序员,十分优秀!