gpt4 book ai didi

cocoa - 无鼠标松开 :/Down: on custom view in NSSplitView on Leopard

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

我目前正在为 OSX 10.5 及更高版本构建项目。首先,10.6用户看不到这一点;只有 10.5 个用户遇到此问题。您无法在 10.6 上重现此问题。

简而言之:当使用 - (void)mouseUp:(NSEvent *)theEvent 的重载实现放置 NSView 的自定义扩展类时,当 mouseUp 包装在 NSSplitView 中时,不会调用 mouseUp。 rightMouseUp:/Down:可以在扩展的 NSView 上工作。

当我将自定义 View 放置在窗口上时,该事件将被调用,而当我将其直接包装在 nssplitview 中时,leopard (10.5) 用户不会调用 mouseup。

重现步骤(在 10.5 上!)

  1. 创建一个新的 cocoa 项目
  2. 创建以下类
  3. 在窗口上拖动自定义 View 并创建 GTTest 类
  4. 在窗口上拖动一个 splitview,然后在其中一个内容 View 中添加一个 GTTest

类(class):

@interface GTTest : NSView {
}

#import "GTTest.h"
@implementation GTTest

- (void)mouseUp:(NSEvent *)theEvent {
NSLog(@"Ger");
}

直接单击窗口上的 GTTest 会记录这一行,单击 NSSplitView 则不会执行任何操作(也可以尝试下一个断点)。 rightMouseDown:/Up: 在 NSView 上有效。

ps> 当我向 splitview 添加一个按钮(也是一个派生的 nsview,带有 nsresponder 对吗?)时,会触发我的 IBAction 方法;我上面的类缺少什么才能正常工作?

我能做什么?

最佳答案

好的,我找到了解决这个问题的方法:

实现 NSSplitView 的扩展类并重写方法,并在拆分器悬停时“冒泡”事件(可通过光标检测到),否则不执行任何操作。这不会导致自定义 View 接收该事件。

- (void)mouseUp:(NSEvent *)theEvent {
if ([NSCursor currentCursor]==[NSCursor resizeLeftCursor]
|| [NSCursor currentCursor]==[NSCursor resizeRightCursor]
|| [NSCursor currentCursor]==[NSCursor resizeLeftRightCursor]) {
[super mouseUp:theEvent];
}

if ([NSCursor currentCursor]==[NSCursor resizeUpCursor]
|| [NSCursor currentCursor]==[NSCursor resizeDownCursor]
|| [NSCursor currentCursor]==[NSCursor resizeUpDownCursor])
{
[super mouseUp:theEvent];
}
}

并使用该类作为 splitview;突然,事件被接收到自定义 NSView。奇怪但真实!

关于cocoa - 无鼠标松开 :/Down: on custom view in NSSplitView on Leopard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463270/

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