gpt4 book ai didi

cocoa - 为什么只有某些操作才必须调用 setTarget?

转载 作者:行者123 更新时间:2023-12-03 16:39:36 26 4
gpt4 key购买 nike

对于大多数操作,我只需在 InterfaceBuilder 中单击并拖动即可将某个接口(interface)对象的调用“连接”到我的代码。例如,如果我想知道用户何时单击表中的一行,我将连接从表的操作拖动到 Controller 的操作。

但是现在让我们考虑用户双击一行。如果我希望在发生这种情况时调用我的操作之一,我不仅需要调用 -[NSTableView setDoubleAction],而且 -[NSControl setTarget]。为什么?

需要明确的是,我不是问为什么 Interface Builder 不支持 setDoubleAction。所有工具都有局限性。我试图更好地了解如何以及为什么 setTarget 似乎没有必要,除非并且直到我希望 setDoubleAction 工作。提出这个问题的另一种方法是:为什么我不需要在 Interface Builder 中执行任何操作来设置表(单击)操作的目标?

最佳答案

如果您将 TableView 连接到 IB 中的某个操作,然后对其调用 setDoubleAction,则不需要对 setTarget 进行额外的调用。但是,如果您只想接收双击消息,并且没有将表格 View 连接到 IB 中的操作,则您必须调用setTarget

TableView 会将 actiondoubleAction 发送到同一目标。你可以想象 NSTableView 是这样实现的:

@implementation NSTableView

- (void)theUserClickedOnMe
{
[self sendAction:[self action] to:[self target];
}

- (void)theUserDoubleClickedOnMe
{
[self sendAction:[self doubleAction] to:[self target]];
}

@end

你在 IB 中所做的事情是这样的:

- (void)userConnectedControl:(NSControl *)control
toAction:(SEL)action
ofObject:(id)object
{
[control setTarget:object];
[control setAction:action];
}

真正的实现与此相去甚远,但这实际上就是正在发生的事情。

关于cocoa - 为什么只有某些操作才必须调用 setTarget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2527884/

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