0

(BOOL)control:(NSControl *)control textView:(NSTextView *)inputfield doCommandBySelector:(SEL)commandSelectorを使用して、ユーザーが押したNSTextViewおよびNSTextFieldのキーを次のように検出しているとのことですが、

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

アドバイスありがとうございます。

4

1 に答える 1

0

テキスト フィールドがあるのに、なぜテキスト ビューとして入力されるのか疑問に思いましたか?

問題の理由は、編集がコントロール自体ではなく、フィールド エディター (通常はウィンドウごとに 1 つのインスタンス) によって行われることです。そのフィールド エディタにそのタグを尋ねると、おそらく結果は -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;
    }
}
于 2013-06-11T08:12:28.040 に答える