如何在Xcode中为自定义Automator Action项目连接按钮的已发送操作

时间:2014-05-20 04:51:01

标签: xcode cocoa applescript automator applescript-objc

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

on buttonSentAction_(sender)
    -- set popupMenuContentValues of my parameters() to aList as list
    my popupMenu's addItemsWithObjectValues_(aList)
end buttonSentAction_
在applescript文件中的

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

我可以在" FM中看到命名文本框"在macosxautomation.com上的示例Automator Action项目在IB中有一个按钮,您可以在Bindings Inspector中看到按钮的发送操作实际上已连接到文件的所有者,而且applescript文件具有匹配处理程序。另外,我默认将File&#39的所有者的控制器设置为applescript文件。 显然,我遗漏了一些关于在Automator Action Project中挂起已发送动作的具体内容。有帮助吗?

3 个答案:

答案 0 :(得分:1)

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

我删除了按钮并重新开始,使用了新的命名方案。这一次,文件所有者收到了拖动,并且所有内容都与发送的操作相关联,并且按预期工作。我完全按照以前的方式做事,所以第一个动作处理程序无法在IB中接收已发送的动作,这是一个谜。

以下示例代码:

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

Bindings Inspector in IB

答案 1 :(得分:0)

也许这会对你有帮助。

我知道由于某种原因,它无法通过控制+拖动到文件所有者,但您可以通过转到绑定检查器连接到文件所有者。

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

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

查看图片: enter image description here enter image description here

答案 2 :(得分:-1)

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

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

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