我需要将鼠标单击发送到我的NSView
。文档中介绍了NSEvent +mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:
函数。但我找不到如何确切使用此信息。应该使用timestamp
,eventNumber
和clickNumber
的哪些值?也没有 click 事件的类型。有鼠标按下和鼠标按下事件的类型。我是否一时将它们都发送出去?还是我必须延迟一些时间?目前,我尝试使用此类代码。
// self.label is NSTextField
[self.label setAllowsEditingTextAttributes: YES];
[self.label setSelectable: YES];
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"Google"];
[str addAttribute: NSLinkAttributeName value: @"http://www.google.com" range: NSMakeRange(0, str.length)];
[self.label setAttributedStringValue:str];
NSEvent *mouseEvent;
mouseEvent = [NSEvent mouseEventWithType:NSLeftMouseDown
location:NSMakePoint(0., 0.)
modifierFlags:0
timestamp:0
windowNumber:0
context:nil
eventNumber:0
clickCount:1
pressure:1.];
[self.label mouseDown:mouseEvent];
mouseEvent = [NSEvent mouseEventWithType:NSLeftMouseUp
location:NSMakePoint(0., 0.)
modifierFlags:0
timestamp:0
windowNumber:0
context:nil
eventNumber:0
clickCount:1
pressure:1.];
[self.label mouseUp:mouseEvent];
似乎有效。但是在单击后,当我将鼠标指针移动到标签时,鼠标指针没有显示为手(打开url)。我的初始问题网址未在NSTextField
中显示为网址。它看起来像是常规文本。单击标签上的任意位置(非链接)后,文本将突出显示。因此,我想在显示NSWindow
之后以编程方式单击以应用单击变通方法。
P.S。实际上,NSTextField
中带有URL的初始问题已解决。我将代码重写为使用NSTextView
而不是NSTextField
。它完全按预期工作,但需要更多自定义。 IB也自动为NSScrollView
创建了NSTextView
。无论如何,关于正确创建NSEvent
和发送问题仍然存在。
答案 0 :(得分:0)
要更改鼠标指针,您可以编写一个自定义的文本字段类,并覆盖“ resetCursorRects”
答案 1 :(得分:0)
您无需点击鼠标。使其成为第一响应者就足够了。但这是脆弱的。有关原始问题NSTextField with URL-style format
的话题很多我遇到了同样的问题,最后,我使用了NSTextView而不是NSTextField。
答案 2 :(得分:0)
我使用以下代码创建一个虚假事件,以弹出一个与我通过Javascript发送的WKWebView位置相关的上下文菜单。无论如何,它也应普遍用于其他目的:
NSPoint clickPoint = NSMakePoint(x, y);
NSEvent * evt = [NSEvent mouseEventWithType:NSEventTypeLeftMouseUp
location:[view convertPoint:clickPoint toView:nil]
modifierFlags:0
timestamp:0
windowNumber:view.window.windowNumber
context:nil
eventNumber:0
clickCount:1
pressure:1.];