Как использовать метод в представлении, в котором я помещаю элементы управления из подкласса одного из этих элементов управления

Я создаю подкласс NSTextField, а в подклассе использую метод события (keyUp), я хочу вызвать метод в основном представлении (вид, который я помещаю в него NSTextFiled), когда пользователь нажимает клавишу Enter. Я использую приведенный ниже код, но не знаю, как вызвать конкретный метод в главном окне

- (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   
    }   
}

person Community    schedule 28.04.2012    source источник


Ответы (3)


1. в главном окне установить: textField.delegate=self;

2. добавить <NSTextFieldDelegate> в mainview.h и 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
{

}
person SajjadZare    schedule 28.04.2012

Это должно сработать ...

SEL sel = @selector(textFieldDidPressEnter:);

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

Затем убедитесь, что класс, для которого вы хотите получить это сообщение, установлен как делегат. Более полный ответ - также объявить textFieldDidPressEnter: как часть протокола делегата. Вот хороший ресурс о том, как это сделать.

person danh    schedule 28.04.2012
comment
Можете ли вы объяснить, где мне ввести этот код? и как установить класс в качестве делегата? - person ; 28.04.2012
comment
Конечно. прямо там, где у вас есть метод // вызова комментария, который существует в главном представлении. Везде, где основное представление устанавливает текстовое поле, вы можете сказать textField.delegate = self; Я должен быть объявлен как соответствующий ‹NSTextFieldDelegate›, и ему необходимо реализовать созданное мной имя метода: textFieldDidPressEnter. Вы можете изменить это имя по своему желанию. - person danh; 28.04.2012

if ( [self.delegate respondsToSelector:@selector(textFieldDidPressEnter:)] ) 
    [(id)self.delegate textFieldDidPressEnter:self];

нет необходимости использовать performSelector:

person user102008    schedule 04.05.2012