0

我将一个 NSTextField 子类化,并在子类中使用一个事件方法(keyUp),当用户按下 Enter 键时,我想在主视图中调用一个方法(我将 NSTextFiled 放在上面)。我使用下面的代码,但不知道如何调用主视图中的具体方法

- (void)keyUp:(NSEvent *)theEvent
{
    NSString *theArrow = [theEvent charactersIgnoringModifiers];
    unichar keyChar = 0;
    keyChar = [theArrow characterAtIndex:0];
    if ( keyChar == NSEnterCharacter )
    {
        //call method that exist in main view   
    }   
}
4

3 回答 3

1

这个应该做...

SEL sel = @selector(textFieldDidPressEnter:);

if (self.delegate && [self.delegate respondsToSelector:sel]) {
    [self.delegate performSelector:sel withObject:self];
}

然后确保您希望收到此消息的类设置为委托。更完整的答案是还声明 textFieldDidPressEnter: 作为委托协议的一部分。 这是有关如何做到这一点的好资源。

于 2012-04-28T19:37:06.157 回答
0

1.在主视图集: textField.delegate=self;

2.添加到mainview.h<NSTextFieldDelegate>和subclass.h

3.使用此代码而不是注释

if ( self.delegate && [self.delegate respondsToSelector:@selector(textFieldDidPressEnter:)] ) 
            [self.delegate performSelector:@selector(textFieldDidPressEnter:) withObject:self];

4.在mainview.m中实现这个方法

-(void)textFieldDidPressEnter:(NSTextField *)txt
{

}
于 2012-04-28T20:14:24.267 回答
0
if ( [self.delegate respondsToSelector:@selector(textFieldDidPressEnter:)] ) 
    [(id)self.delegate textFieldDidPressEnter:self];

无需使用performSelector:

于 2012-05-04T20:15:36.240 回答