gpt4 book ai didi

cocoa - 鼠标拖动 : is not passed down two subviews?

转载 作者:行者123 更新时间:2023-12-03 16:57:56 25 4
gpt4 key购买 nike

我正在编写一个程序,其中有许多子类 NSView(框架),这些子类具有不同的内容,可以在其 super View 中通过鼠标拖动。所有 View 都包含一个 subview ,称为 contentView,而该 subview 又可以包含更复杂的层次结构。

如果我有一个不可编辑的 NSTextField 作为 contentView,则 mouseDown: 和 mouseDragged: 事件会毫无问题地传递到其 super View ,并且拖动效果很好。

mouseDown:    ---> [NSTextField] ---> [Frame]
mouseDragged: ---> [NSTextField] ---> [Frame]

如果 contentView 是 NSView 的子类,而 NSView 又包含许多 NSTextFields,则 mouseDragged: 事件不会从 NSTextFields 传递到 super View 。

mouseDown:    ---> [NSTextField] ---> [subclassed NSView] ---> [Frame]
mouseDragged: ---> [NSTextField] -x->

mouseDown: 事件被框架接收。单击 NSTextFields 之间的间隙并直接拖动 contentView 效果很好。

NSTextFields 在 contentView 中的设置如下:

NSTextField *textfield = [[NSTextField alloc] initWithFrame:rect];
[textfield setBordered:NO];
[textfield setSelectable:NO];
[textfield setEditable:NO];
[textfield setTextColor:[NSColor blackColor]];
[textfield setBackgroundColor:[NSColor clearColor]];
[textfield setDrawsBackground:NO];
[textfield setAlignment:NSRightTextAlignment];
[textfield setFont:[NSFont fontWithName:@"Helvetica" size:14]];
[self addSubview:textfield];
[textfield release];

我尝试向子类 NSTextField 和子类 NSView 添加 mouseDragged: 方法,并忽略该方法。两者都没有什么区别。处于同一 subview 级别的其他 NSControl 也存在该问题。

- (void)mouseDragged:(NSEvent *)theEvent
{
[super mouseDragged:theEvent];
}

- (void)mouseDragged:(NSEvent *)theEvent
{
[self.superview mouseDragged:theEvent];
}

目前,这种行为对我来说似乎完全不直观。我有什么遗漏的吗? (我正在 Mountain Lion 上使用 Xcode 4.6.2。)

最佳答案

NSTextView 对鼠标有特殊的处理。不确定 NSTextField,但它可能会表现出相同的行为。例如,没有 mouseUp 事件。 mouseDown 事件进入本地循环(可能用于拖动内容)。您可以尝试在类中覆盖 mouseDown 并调用 NSView 的 mouseDown 来绕过 NSTextField 的鼠标按下。请参阅this SO question了解如何执行此操作。

关于cocoa - 鼠标拖动 : is not passed down two subviews?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16117572/

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