2013-06-11 4 views
0

Я понимаю, что вы используете (BOOL) управления: (NSControl *) управления TextView: (NSTextView *) InputField doCommandBySelector: (SEL) commandSelector обнаружить ключ для NSTextView и NSTextField что пользователь нажал, как показано ниже.Key вниз с несколькими управления

- (BOOL)control:(NSControl *)control textView:(NSTextView *)inputfield doCommandBySelector:(SEL)commandSelector 
    { 
    if(commandSelector == @selector(insertNewline:)) 
     { 
      //... a key is down 
      return YES; // We handled this command; don't pass it on 
     } 
     else 
     { 
      return NO; 
     } 
    } 

Мой вопрос в том, как вы указываете, в каком текстовом поле отсутствует ключ, если у вас есть несколько таких элементов управления. Я установил тег, как показано ниже, чтобы увидеть, не нажата ли клавиша для определенного текстового поля, но она не работает.

- (BOOL)control:(NSControl *)control textView:(NSTextView *)inputfield doCommandBySelector:(SEL)commandSelector 
{ 
     if ([inputfield tag] == 100) 
     { 
     if(commandSelector == @selector(insertNewline:)) 
     { 
       //... a key is down 
       return YES; // We handled this command; don't pass it on 
     } 
     else 
     { 
       return NO; 
     } 
    } 

    else 
    { 
     return NO; 
    } 
} 

Благодарим за советы.

ответ

0

Вам интересно, почему это напечатано как текстовое представление, даже если у вас есть текстовое поле?

Причина вашей проблемы в том, что редактирование не выполняется самим элементом управления, но редактор полей (обычно один экземпляр для каждого окна). Вы задаете этот редактор полей для своего тега и, вероятно, получите результат -1. (Это означает что-то вроде тега.)

«Настоящее» текстовое поле является делегатом редактора полей. Чтобы получить его, вы должны задать параметр для своего делегата. Затем вам не следует использовать тег, но устанавливать выходные данные в текстовые поля и сравнивать указатели. (Это немного сложно из-за набора текста.)

- (BOOL)control:(NSControl *)control textView:(NSTextView *)inputfield doCommandBySelector:(SEL)commandSelector 
{ 
    id realControl = inputfield.delegate; 
    if (realControl == self.field1) 
    { 
     NSLog(@"I'm 1"); 
     return YES; // We handled this command; don't pass it on 
    } 
    else if (realControl == self.field2) 
    { 
     NSLog(@"I'm 2"); 
     return YES; // We handled this command; don't pass it on 
    } 

    else 
    { 
     return NO; 
    } 
} 
+0

Хм ... Я не знаю, как вы это понимаете. Это работает. Да, то, что вы говорите, имеет смысл. Но я не думаю, что мог бы сам это понять. Задача-С сложна. Во всяком случае, большое спасибо. –

+0

Эта система имеет свои традиции в раннем начале NextStep. В то время оптимизация была важна для платформы для графического интерфейса. То же самое происходит с ячейками в Mac OS. https://www.youtube.com/watch?v=j02b8Fuz73A –

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