2012-07-04 6 views
0

У меня есть NSWindow, состоящий из NSView, который появляется только в каком-то конкретном случае, этот NSView состоит из NSSearchField, который я хочу, если есть данные в буфере обмена, он появится в searchField, иначе он будет пустым. Я могу это сделать что я хочу, если есть данные в SearchField она должна быть в центре внимания, я пытался это так:highlight NSSearchField

в классе NSViewController есть функция, которая возвращает NSSearchField который является классом переменного

   -(NSSearchField*)getSearchField 
        { 
        return searchField; 
        } 

в классе NSWindowController Я делаю это первым ответчиком, где pSearchContact - это переменная экземпляра класса NSViewController

 [[self window] makefirstResponder:[pSearchContact getSearchField]]; 

Это работает нормально, но я не знаю, почему searchField не получает фокусировку на

Является ли их что-то вроде searchField станет первым ответчиком, только если она является частью NSWindow, потому что в моем случае searchField является в NSView, который находится в NSWindow.

Заранее спасибо

ответ

0

Ваш вопрос немного запутанным, но я думаю, что вы просите, чтобы сводится к тому, «почему я не могу когда-либо сделать мое поле поиска фокуса?».

Это одна строка кода:

[[self window] makefirstResponder:[pSearchContact getSearchField]]; 

имеет немного слишком много с ним происходит для моего комфорта (то есть я бы не вставлять столько функциональность - любые куски, которые могли бы пойти не так или непрочное - в одну строку кода).

Как насчет делать что-то вроде этого:

NSWindow * myWindow = [self window]; 
if(myWindow) 
{ 
    if(pSearchContact) 
    { 
     NSResponder * ourSearchField = [pSearchContact getSearchField]; 
     if(ourSearchField) 
     { 
      [myWindow makeFirstResponder: ourSearchField]; 
     } else { 
      NSLog(@"ourSearchfield is nil; why?"); 
     } 
    } else { 
     NSLog(@"pSearchContact is nil; why?"); 
    } 
} else { 
    NSLog(@"myWindow is nil; why?"); 
} 

Это также может позволить вам сузить почему настройка фокуса не работает для вас.

+0

Я тоже пробовал свой код, но он все еще не работает. Ничто не имеет значения NULL (MyWindow, pSearchContact и ourSearchField), поэтому он достигает [myWindow makeFirstResponder: ourSearchField]; это означает, что он устанавливает searchField в качестве первого ответчика, но я не вижу в этом фокуса. –

0

Поздний отклик, но у меня была аналогичная проблема, которая была устранена путем снятия отметки refusesFirstResponder в Xcode/Interface Builder.