выделить NSSearchField

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

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

              -(NSSearchField*)getSearchField
                  {
                  return searchField;
                  } 

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

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

Он работает гладко, но я не знаю, почему searchField не получает фокус

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

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


person Ankita Shrivastava    schedule 04.07.2012    source источник


Ответы (2)


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

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

[[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?" );
}

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

person Michael Dautermann    schedule 04.07.2012
comment
Я тоже попробовал ваш код, но он все еще не работает, ни одно из значений не равно NULL (MyWindow, pSearchContact и ourSearchField), поэтому он достигает до [myWindow makeFirstResponder: ourSearchField]; что означает, что он устанавливает searchField в качестве первого ответчика, но я не вижу на нем фокуса. - person Ankita Shrivastava; 04.07.2012

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

person DDP    schedule 14.10.2015