我已经试着弄清楚这几天了,现在仍然不能理解这是如何工作的。
我在Xcode 13.4.1版本中创建了一个新的AppleScript项目,并添加了一个复选框和一个按钮。我的目标是根据复选框是已勾选还是未勾选来尝试做一些事情。
我对Xcode非常陌生,所以我很可能做错了什么。不显示实际代码的原因是我没有任何工作,所以我问是否有人可以帮助我通过填补缺失的空白来学习这一点。
Xcode Applescript对象的文档对我来说似乎很薄,或者至少这是我发现的。
谢谢
property checkBox : 1 -- bound to the value of the check box & is ticked when run
#START BUTTON
on startButtonClick_(sender)
-- if checkbox is ticked then show alert "ticked"
-- if checkbox is NOT ticked then show alert "NOT ticked"
end startButtonClick_
有人建议包含真实的代码会更有用,我同意,所以这里是我最近的尝试。
property checkBox : missing value -- bound to the value of the check box
#START BUTTON
on startButtonClick_(sender)
set checkBox to (checkBox as boolean) -- toggle
if checkBox is 1 then display alert "Ticked"
log checkBox
end startButtonClick_
警报从未显示,但是当我按下按钮
时,当复选框被选中时,日志输出显示1,当它未被选中时显示0这里有两个问题,具体取决于您要做什么。
如果您试图连接复选框动作,以便在单击复选框时调用处理程序,请遵循以下步骤:
-
在您的脚本中创建一个处理程序(在您的示例中,是
startButtonClick_(sender)
处理程序) -
打开xib文件,选择左侧的First Responder对象
-
转到检查器区域的属性窗格。你会看到框标记为"用户定义",所以点击"+"按钮添加一个新的用户自定义动作
- 使用带有冒号的处理程序名称,而不是下划线,例如:startButtonClick:
- 设置'type'为NSButton(或者我想你可以使用默认的'id')
-
选择的文件的所有者对象IB,检查员去连接,并确保AppDlegate连接文件所有者委托。
- 应该是,但是我在测试中遇到了这个问题,所以…
-
在IB中选择相关按钮
-
转到连接检查器,从发送动作区域control-drag到First Responder,选择您自定义的动作(现在应该出现在弹出菜单中)
现在,当你运行应用程序并单击复选框时,它将以对复选框的引用作为参数运行处理程序。您可以使用sender's state()
查询该按钮的当前值。
如果您想要一个静态的、全局的按钮引用,以便您可以在脚本中的任何地方检查它的状态,那么您可能会遇到问题。在Xcode 12和更早的版本中,脚本属性会作为出口出现在AppDelegate弹出菜单中,这样你就可以图形化地连接GUI元素。Xcode 13有一个尚未解决的错误,这使得这是不可能的,但你可以通过直接编辑xib xml在一定程度上解决它。我在这篇文章中详细介绍了如何做到这一点。
希望对你有帮助。