当NSLutel上有另一个控件时,NSButton点击不起作用

时间:2015-12-23 07:26:48

标签: objective-c cocoa

我知道这似乎是一个愚蠢的问题,但它让我很烦恼,这就是为什么我把它放在Stackoverflow上。请稍微宽容一点。

这是我的NSLabel

enter image description here

上面有2个NSLabel

  1. 显示按钮的名称已安装的应用

  2. 显示已安装应用的数量

  3. 问题

    当我点击NSButton附近时,MouseDownPreview操作不会被调用。

    P.S:我来自 Microsoft WPF 世界。我们有class MyClass { var aProperty: (() -> ())? init() { // problem when assign property as a method self.aProperty = aMethod } func aMethod() { print("method!!!") } deinit { print("MyClass is being deinitialized") } } var instance: MyClass? = MyClass() instance?.aProperty?() instance = nil 个事件来处理这类情况。我对COCOA了解不多。请帮助,非常感谢...

2 个答案:

答案 0 :(得分:2)

主要问题是NSTextField。文本字段绘制在NSButton之上,因此它涵盖了它。然后单击文本区域,不将mouseClick事件发送到NSButton

你可以用很少的方法来解决这个问题:

  1. 而不是NSTextField创建NSButtons并设置圆形按钮的操作方法。
  2. 使用可以accept mouse click event的自定义NSTextField,并调用圆形按钮的操作。
  3. @interface ClickableTextField : NSTextField
    @end
    
    @implementation ClickableTextField
    
    - (void)mouseDown:(NSEvent *)theEvent
    {
        [self sendAction:[self action] to:[self target]];
    }
    
    @end
    

答案 1 :(得分:0)

子类NSTextField并覆盖以下方法以返回nil。

override func hitTest(aPoint: NSPoint) -> NSView? {
    return nil
}