【问题标题】:Is there a way to add the mouse event to an Action in Interface Builder?有没有办法将鼠标事件添加到 Interface Builder 中的 Action 中?
【发布时间】:2021-05-25 10:50:59
【问题描述】:

有没有办法在 Interface Builder 中将鼠标事件添加到 Action 中?

目前在我的 ViewController.h 我有这个:

- (IBAction)myStepperAction:(id)sender;

在我的 ViewController.m 我有这个:

- (IBAction)myStepperAction:(id)sender { }

在我的事件处理程序中,我有以下内容: (我正在使用 C#,但我可以阅读一些 Swift)

    partial void myStepperAction(Foundation.NSObject sender) {
        var stepper = sender as NSStepper;
    }

如果我添加第二个参数,我会收到错误:

    partial void myStepperAction(Foundation.NSObject sender, Event event) {
        var stepper = sender as NSStepper;
        var value = event.CTRLKey==true ? stepper.DoubleValue + 10 : stepper.DoubleValue;
    }

CS0759:没有找到用于实现声明的定义声明 部分方法 'ViewController.myStepperAction(NSObject, EventArgs)'

有没有办法将事件传递给部分方法?或者有没有办法获取应用程序鼠标事件?

我要做的是在单击步进器时,检查是否还按下了 CTRL 或 SHIFT 键以使其增加 10 而不是 1。

【问题讨论】:

  • 如果我理解正确,您是否希望在直接单击步进器时将值增加 1,并在按 CTRL 或 SHIFT 键单击步进器时将值增加 10?
  • @ColeX-MSFT 这是正确的

标签: swift xcode xamarin interface-builder


【解决方案1】:

您可以使用CGEventSourceKeyState来检测当前是否按下了特定键。

您可以在此link 中找到control 的确切号码。

应该是0x3B

查看下面 Xamarin 中使用的代码

partial void myStepperAction(Foundation.NSObject sender) {
    var stepper = sender as NSStepper;

    bool isCtrlPressed = CGEventSource.GetKeyState(0,0x3b);
    var value = isCtrlPressed ? stepper.DoubleValue + 10 : stepper.DoubleValue;
       
}

【讨论】:

  • 这很好用。你会碰巧知道用户是按向上还是向下按钮吗?
  • 只要在我提供的链接中找到代码,向上和向下按钮的代码是0x7E0x7D
  • 我没说全。我的意思是步进器上的按钮。我为此创建了一个单独的问题。 stackoverflow.com/questions/67713746/…
猜你喜欢
  • 2015-03-03
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 2011-06-24
  • 1970-01-01
  • 2010-09-15
相关资源
最近更新 更多