NSObject可以作为一个类的两个实例的委托吗?

时间:2012-07-19 10:57:41

标签: objective-c delegates

我有两个NSTextfield,我想对每个使用相同的方法:

-(void)controlTextDidChange: (id)sender {
[label setStringValue:[textfield stringValue]];
}

我想使用不同的label/textfield对,具体取决于NSTextField发送的消息。这些信息是否在sender对象中可用,还是我必须创建新的委托?

2 个答案:

答案 0 :(得分:2)

[sender object]是您的textfield,因此轻松获取stringValue。但是,获取相关标签不是:您需要构建自己的方案才能找到它。

一种方法是通过将tag属性设置为不同的数字来标记文本字段。如果将第一个标签的文本字段标记设置为1,将第二个标签的文本字段标记设置为2,则可以执行以下操作:

-(void)controlTextDidChange: (id)sender {
    NSTextField *textfield = [sender object];
    NSLabel *label = nil;
    switch ([textfield tag]) {
    case 1: label = myLabelOne; break;
    case 2: label = myLabelTwo; break;
    }
    [label setStringValue:[textfield stringValue]];
}

答案 1 :(得分:1)

以下是我解决它的方法:

-(void)controlTextDidChange: (id)sender {
    [[[window contentView]
    viewWithTag:( [[sender object] tag] + 100 )]
    setStringValue:[ [sender object] stringValue]];

我在接口构建器中将标签的标记设置为值:100 +关联的NSTextField的标记。 IBOutlet也不需要。