【问题标题】:How to connect a button's Sent Action in Xcode for a custom Automator Action project如何在 Xcode 中为自定义 Automator Action 项目连接按钮的 Sent Action
【发布时间】:2014-07-08 05:01:06
【问题描述】:

我在 Xcode 的 Interface Builder 中,创建一个 Cocoa-Applescript 自定义 Automator Action。我在界面中有一个 Button 和一个 ComboBox 菜单。当用户单击按钮时,我想填充组合框菜单的内容值。 我已经创建了

on buttonSentAction_(sender)
    -- set popupMenuContentValues of my parameters() to aList as list
    my popupMenu's addItemsWithObjectValues_(aList)
end buttonSentAction_

applescript 文件中的处理程序,但是当我 ctrl 从按钮拖动到文件所有者时,文件所有者没有突出显示让我放弃连接。我期望它放下并让我选择 buttonSentAction_ 处理程序来接收发送的操作。如果我右键单击 File's Owner,我在 Applescript 控制器文件中创建的接收到的操作处理程序不会显示出来。 (注意,我仍然不确定在该处理程序中填充 ComboBox 菜单的正确行。)

我可以在 macosxautomation.com 的“FM to Named Text Boxes”示例 Automator Action 项目中看到在 IB 中有一个按钮,您可以在 Bindings Inspector 中看到该按钮的发送操作实际上已连接到文件的所有者,并且 applescript 文件具有匹配的处理程序。另外,文件所有者的控制器默认设置为applescript文件。 显然,我错过了一些关于在 Automator Action Project 中连接发送动作的具体内容。有什么帮助吗?

【问题讨论】:

  • 在 stackoverflow 上有几个类似的问题,人们无法连接到文件的所有者,但它们不是 Automator Action 项目。

标签: xcode cocoa applescript automator applescript-objc


【解决方案1】:

更新:我让它工作了。 关键是您必须先为对象创建一个 Outlet,然后才能绑定到 Sent Action Handler。

我删除了按钮并使用新的命名方案重新开始。这一次,文件的所有者收到了拖动,所有与发送的动作相关的东西都按预期工作。我做的事情和以前完全一样,所以为什么第一个动作处理程序无法在 IB 中接收 Sent Action 是个谜。

示例代码如下:

on searchTypeMatrixWasClicked_(sender)
    -- called with the matrix sent action
    set theIndex to (actionTypeIndex of my parameters()) as integer
    if theIndex is 0 then
    -- do stuff, etc.
    else if theIndex is 1 …
    end if
end

【讨论】:

  • 好的,刚刚添加了相关的事件处理程序代码,以及绑定检查器的屏幕截图。
【解决方案2】:

也许这会对你有所帮助。

我知道由于某种原因,通过控制 + 拖动到 File's Owner 不起作用,但您可以通过绑定检查器连接到 File's Owner。

这并不完全是您正在做的事情,因为您想将信息发送到处理程序,但我认为诀窍是使用参数对象。您必须创建一个键来保存该值,并使用 AppleScript 使用 get |keyname| of my parameters() as integer(或字符串、列表)来访问它。见The Structure of the on run Command Handler

下面我提供了一个示例,说明如何将属性连接到弹出按钮。

看图片:

【讨论】:

  • 您正在描述如何设置绑定,我对此没有任何问题。我的问题是询问如何将 File's Owner 连接到 Sent Action,这与绑定到您演示的值不同。
  • @jweaks 我明白你在说什么。我也有兴趣找到这个。我会尝试一下。
  • 我刚刚又完成了所有步骤,这次成功了。大谜团。
【解决方案3】:

我也没有使用 Automator 项目将操作连接到 Interface Builder 中的自定义对象:

  • 将现有对象设置为 instantiateWithOwner:topLevelObjects: 中的所有者。然后在 Nib 文件中相应地设置类。

  • 通过将 NSObject 拖动到您的 Nib 来实例化一个新的自定义对象,它将显示在屏幕截图中的“参数”对象下方。然后将它的类设置为您希望 IB 实例化的任何对象。您还应该使用 Outlet 保留此对象。

【讨论】:

  • 感谢您的努力,但我认为这个答案对于 Applescript Automator 动作项目没有意义。文件的所有者应该指向所有者文件的实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多