2012-04-28 6 views
0

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

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

ответ

0

1.in основной комплект вид: textField.delegate=self;

2.Add <NSTextFieldDelegate> в mainview.h и subclass.h

3.Use этот код Вместо комментария

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

4.implement этот метод в mainview.m

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

} 
+0

Большое вам спасибо –

+0

Вы оба приветствуются :-) – danh

1

Это должно сделать это ...

SEL sel = @selector(textFieldDidPressEnter:); 

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

Тогда убедитесь, что класс, в котором вы хотите получить это сообщение, установлен как делегат. Более полным ответом является также объявление textFieldDidPressEnter: как часть протокола делегата. Here's a good resource сверху как сделать.

+0

Вы можете объяснить, где я должен вводить этот код? И как установить класс в качестве делегата? –

+0

уверен. прямо там, где у вас есть комментарий // метод вызова, который существует в основном представлении. Где бы основное представление не создавало textField, вы можете сказать textField.delegate = self; «Я» должен быть объявлен как соответствующий , и ему необходимо реализовать имя метода, которое я составил: textFieldDidPressEnter. Вы можете изменить это имя по своему усмотрению. – danh

+0

Огромное вам спасибо –

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

Не нужно использовать performSelector:

 Смежные вопросы

  • Нет связанных вопросов^_^