gpt4 book ai didi

cocoa - 在不同的类中调用IBAction

转载 作者:行者123 更新时间:2023-12-03 17:16:06 25 4
gpt4 key购买 nike

我的基于文档的应用程序有一个带有表格 View 的窗口。 tableview 有一个数据源,它指向 NSObject 类型的类(称为 HopBill),其中包含 NSMutableArray (aHopBill) 和所需的 tableview 方法。到目前为止一切顺利。

为了向 TableView 添加行,我添加了一个由 NSWindowController(称为 HopBillSheetController)控制的工作表。按工作表中的“确定”按钮时。我实际上需要执行两个 IBActions(这是不可能的):将行添加到 TableView 的数组中并关闭工作表。我可以将工作表中的“确定”按钮连接到 NSWindowController(以关闭工作表)或将其连接到 NSObject(以将行添加到数组中)。但我两者都想要:-)

是否可以从 NSObject 调用 NSWindowController 中的 IBAction?或者还有其他方法可以做到这一点吗?

我是 Cocao 和 Objective-C 的新手,所以请温柔一点:-)

最佳答案

如果您的工作表是带有 NSPanel 的 nib/xib,则关闭它的调用只需 [panel close];假设您的窗口 Controller 具有面板的属性,您可以将关闭代码放在其行添加 IBAction 的末尾。或者,如果您愿意,您可以让 IBAction 本身调用另一个方法。

如果您的面板正在运行模态,您可能也需要停止模态。 (如果面板关闭后所有内容都保持卡住状态,则需要这样做;否则没关系。)

假设您的数据源 hopBill 是窗口 Controller 的一个属性,您在窗口 Controller 中编写的任何 IBAction 也可以访问 hopBill;它可以满足您所需的一切。

因此,将单个 IBAction 添加到窗口 Controller 并将面板的 OK 按钮连接到它。这应该可行。

至于从 Nib 中的控件以外的其他地方调用 IBAction,是的,您可以这样做。使用对控件的引用作为发送者参数,如果 IBAction 不使用发送者参数,则使用 nil。

您还可以通过编程方式创建面板,或使用 NSAlert。但听起来您当前的设置更简单,因此更好。

<小时/>

查看应用程序 Controller 的 h 文件:Apple's ClockControl example

NSMutableArray *appointments 属性是将由 NSTableViewDataSource 协议(protocol)方法使用的实际数据源。 IBAction“addAppointment”可以直接访问“约会”:[self.appointments addObject:whatever atIndex:whatever];

可以修改 ClockControl 示例以使用 HopBill。您可以将其声明导入顶部: #import "HopBill.h"然后,它将声明 HopBill *hopBill; 而不是“appointments”属性。 “addApointment”将访问 HopBill 的可变数组 (aHopBill),如下所示: [self.hopBill.aHopBill addObject:whatever atIndex:whatever];

关于cocoa - 在不同的类中调用IBAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6310677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com