- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,基本上我有一个带有一系列稍微重叠的 subview 的 View 。单击 subview 时,它会通过非常简单的两行代码移动到顶部(除其他外):
-(void)mouseDown:(NSEvent *)theEvent {
if (_selected) { // Don't do anything this subview is already in the foreground
return;
}
NSView *superview = [self superview];
[self removeFromSuperview];
[superview addSubview:self positioned:NSWindowAbove relativeTo:nil];
}
这工作正常,似乎是执行此操作的“正常”方式。
问题是我现在向 View 引入一些拖动逻辑,因此我需要响应 -mouseDragged:
。不幸的是,由于 View 已从 View 层次结构中删除并在此过程中重新添加,因此我无法让 View 到达前台并在同一鼠标操作中拖动。它接收 mouseDown:
,但从不接收 mouseDragged:
或任何后续事件。仅当我松开鼠标并再次单击 View 时,它才会拖动,因为第二次单击不会进行任何 View 层次结构杂耍。
我能做些什么来让 View 像这样移动到前台,并继续接收后续的 -mouseDragged:
和 -mouseUp:
事件接下来是什么?
我开始按照在 super View 中重写 -hitTest:
的思路并拦截 mouseDown 事件,以便在实际接收之前将 View 带到前台事件。这里的问题是,在 -hitTest:
中,我如何区分我实际执行 HitTest 的事件类型?我不想将 subview 移动到前台以执行其他鼠标事件,例如 mouseMoved 等。
更新 |我实际上已经在我的 super View 中完成了此操作,但感觉就像是直接从 -hitTest:
触发事件的非常糟糕的代码味道。
-(NSView *)hitTest:(NSPoint)aPoint {
NSView *view = [super hitTest:aPoint];
if ([view isKindOfClass:[EDTabView class]] && ![(EDTabView *)view isActive]) {
// Effectively simulate two mouseDown events in sequence for this special case
[view mouseDown:nil]; // Works because I know too much about the implementation
}
return view;
}
有两件事感觉不对。最大的问题是我在 -hitTest:
返回之前执行操作,然后在 -hitTest:
完成后按照 AppKit 的处理方式执行操作。第二个是我没有要传递的事件,所以我传递的是零。它在这种情况下有效,因为我知道事件处理程序实际上并不处理任何事件数据,但这并不是很好。另一种方法是将整个逻辑移至 super View 中,但这里的关注点分离感觉更糟。
更新 |这个 -hitTest:
hack 被破坏了......当我没有单击鼠标时,例如当我将某些东西拖到 View 顶部时,它就会被触发。仍在寻找解决此问题的好方法。
答案可以从字面上指示 View 在拖动操作期间如何离开并重新进入其 super View ,或者(也许更优雅)是将 View 移动到前台的替代方法,而不是 [view removeFromSuperview ]; [superview addSubview:view ...];
.
最佳答案
好吧,我一时兴起尝试了一些不合逻辑的事情。
而不是将 View 移动到前景:
[theView removeFromSuperview];
[theSuperview addSubview:theView positioned:NSWindowAbove relativeTo:nil];
我只是删除了 removeFromSuperview
行,想知道如果您尝试向 super View 添加 View 两次,AppKit 实际上会做什么(我假设它提供了防止这种情况发生的保护)。
它可以工作,至少在 Snow Leopard 下是这样,并且它解决了很多问题。正如方法名称所暗示的那样,父 View 中已经存在的 View 不会被添加,但它确实会设置其位置,而不必先将其从父 View 中删除。
关于cocoa - 将 subview 带到 mouseDown 的顶部 : AND keep receiving events (for dragging),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574096/
当我使用 resharper 时,他总是说 有什么区别? 任何细节都会很好 谢谢大家。 最佳答案 较短的语法已在 C# 2.0 中引入,它只是较长形式的语法糖。 无论你写什么,结果总是一样的。但是,更
我需要在网页中捕获一些数据,然后用户创建 mousedown 事件或在用户按页面元素上的 TAB 键时模拟它。对于 mousedown 我使用标准代码,例如: $('*').on('mousedown
我有一个 html 表格,其中包含拖放列、可调整大小的行以及根据 mousedown、mousemove 和 mouseup 进行更改的可调整大小的列。为了获得更好的性能,我应该让文档在鼠标移动期间不
所以我还没有开始写这些,所以为了清楚起见,我会尽我最大的努力把一些伪代码放在一起——但这里的想法是用户会点击并按住一个“按钮” (最终可能不会成为一个实际的按钮),然后生成一个可移动的 DIV。一旦创
如何在 JQuery 中创建鼠标按下并移动时触发的事件?并且每次 mousedown + mousemove 只触发一次? 最佳答案 更新: 因此,看起来如果您的鼠标不再位于绑定(bind) onmo
我正在使用 NSView 进行拖放操作。 在要拖动的对象(NSView 的子类)中,我实现了 mouseDown: 方法,如下所示: @try { NSPoint location;
我有一个包含 2 个事件的 TPanel: procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shif
我的应用程序一直表现不佳。在删除越来越多的代码后,我设法找到了问题的核心,但这对我来说毫无意义。 一点背景。我的网络编辑器应用程序对击键使用react,例如当按下 Alt 时,调整大小的处理程序将被隐
我希望按钮在单击时更改其颜色(鼠标按下时颜色较深,鼠标松开时原始颜色)并且它可以工作,但仅在第二次单击时有效。这是为什么?我该如何解决这个问题? 按钮 ID 为 1 到 10(按钮 1、按钮 2...
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 3 年前。 有没有办法在动态添加的元素上使用 mouse
我正在尝试向 DIV 添加一个简单的 mousedown 事件监听器。 DIV 有一个子节点,即 IMG。但是,当 mousedown 事件触发时,该事件的 target 和 srcElement 属
嗨,我有这个 HTML 代码 Passengers 并且有这个JS代码 $("Table tr th").mousedown(function (e) { /*mouse
我有一个 mousedown 事件可以更改 Canvas 中对象的图像。但是,在第一次单击期间,除非我添加超时,否则更新功能不会更新图像。此外,我什至尝试 promise 在新图像链接之后等待,然后再
我已经创建了过渡链接,但是当应该使用 onmousedown 事件调用该函数时,我得到了一个未捕获的未定义函数。显然我的功能已定义。我还在学习代码,所以我看不到或不明白它是什么。任何提示将不胜感激。
我正在使用一个名为 circliful 的 jquery 库: https://github.com/pguso/jquery-plugin-circliful 我用它来创建“触觉加载”效果。 在这个
在下面的代码片段中,只有“mousemove”事件有效。 'mousedown' 没有效果,我无法解释为什么会这样。如果我将“mousedown”替换为“click”,它确实有效,但是我想使用 mou
当你使用方法的时候 public boolean mouseDown(Event e, int x, int y) 在Java中,Event对象是干什么的,有什么用?我正在尝试编写一个程序,让某人点击
我正在尝试像这样加载我的导航栏: $.get("nav.html",function(menuData){ $("body").html(menuData); )}; 在“nav.html”中我们
我的问题是,当右键发生 mousedown 事件时,我需要检查是否有 div 如果没有,那么我的 flag 全局 variable 变为 false 但我没有得到该条件。 我的 jQuery 脚本如下
我正在尝试编写一个可移动的对话框,但出现问题。有时当我想通过移动对话框上方的某个位置来移动对话框时,而不是对话框本身,标题文本正在移动,如下所示: 标题文本的 CSS: .arg-dialog-tit
我是一名优秀的程序员,十分优秀!