Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 无鼠标悬停:/Down:在Leopard上的NSSplitView中的自定义视图上_Cocoa_Nsview_Osx Leopard_Nssplitview - Fatal编程技术网

Cocoa 无鼠标悬停:/Down:在Leopard上的NSSplitView中的自定义视图上

Cocoa 无鼠标悬停:/Down:在Leopard上的NSSplitView中的自定义视图上,cocoa,nsview,osx-leopard,nssplitview,Cocoa,Nsview,Osx Leopard,Nssplitview,我目前正在为OSX 10.5及更高版本开发一个项目。 首先,10.6用户没有看到这一点;只有10.5个用户存在此问题。 您无法在10.6上复制此内容 简言之:当使用-(void)mouseUp:(NSEvent*)重载实现放置NSView的自定义扩展类时,当mouseUp包装在NSSplitView中时,不会调用该事件。rightMouseUp:/Down:在扩展NSView上工作 当我将自定义视图放在窗口上时,会调用该事件;当我将其直接包装在nssplitview中时,leopard(10.5

我目前正在为OSX 10.5及更高版本开发一个项目。 首先,10.6用户没有看到这一点;只有10.5个用户存在此问题。 您无法在10.6上复制此内容

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

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

复制步骤(在10.5上!)

  • 创建一个新的cocoa项目
  • 创建以下类
  • 在窗口上拖动一个自定义视图并使类成为GTTest
  • 在窗口上拖动一个splitview,只需在其中一个内容视图中添加一个GTTest
  • 类别:

    @interface GTTest : NSView {
    }
    
    #import "GTTest.h"
    @implementation GTTest
    
    - (void)mouseUp:(NSEvent *)theEvent {
     NSLog(@"Ger");
    }
    
    单击窗口上的GTTest direclty记录好的行,单击NSSplitView one不做任何事情(也尝试一个断点)。rightMouseDown:/Up:在NSView上工作

    ps>当我向splitview(也是派生的nsview,nsresponder对吗?)添加一个按钮时,会触发我的iAction方法;我上面的课缺了什么也做对了


    我能做什么?

    我不知道为什么10.5和10.6在这方面会有所不同,但您可以尝试覆盖
    mouseDownCanMoveWindow
    以返回NO,如以下问题所示:


    我不知道为什么10.5和10.6在这方面会有所不同,但您可以尝试覆盖
    mouseDownCanMoveWindow
    以返回NO,如以下问题所示:


    好的,我找到了一个解决方案:

    实现NSSplitView的扩展类,如果拆分器处于悬停状态(可通过光标检测),并且如果不只是什么都不做,则重写这些方法并“弹出”事件。此“不执行任何操作”将导致自定义视图接收事件

    - (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。
    奇怪但真实

    好的,我找到了一个解决方案:

    实现NSSplitView的扩展类,如果拆分器处于悬停状态(可通过光标检测),并且如果不只是什么都不做,则重写这些方法并“弹出”事件。此“不执行任何操作”将导致自定义视图接收事件

    - (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。
    奇怪但真实

    谢谢你的回答,但是没有关系,但我还是试过了。它不起作用。10.5的nssplitview上有一个问题。如果我能以某种方式解决这个问题就好了。谢谢你的回答,但这没有关系,但我还是试过了。它不起作用。10.5的nssplitview上有一个问题。如果我能以某种方式解决它就好了。