Проблема с доступом к NSTextField из метода, вызванного пользовательским представлением - PullRequest
0 голосов
/ 30 октября 2011

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

По сути, я встроил набор кнопок, NSTextFields и Custom View в основной xib, просто перетащив их прямо из библиотеки в окно по умолчанию (а затем, конечно, связав их с IBOutlets и IBActions) , Одна из кнопок - это кнопка «Открыть», которая вызывает функцию. Функция делает несколько вещей: она запускает NSOpenPanel, а затем изменяет некоторые из полей NSTextFields (используется для изменения имени и пути к изображению). Этот код называется следующим образом:

- (IBAction)openButtonPressed: (id)sender {
    [self runOpenPanel];
}

Теперь я также запускаю свой обработчик keyDown из пользовательского представления, как я сказал ему acceptFirstResponder. (Я знаю, что, вероятно, плохая практика - не писать отдельный класс Controller, но лучше оставить его в другой раз.) Таким образом, мое событие keyDown выглядит следующим образом (упрощенно, как в реальном коде, который есть в операторах if для обработки определенных ключей отдельно которые не относятся к этому вопросу):

- (void)keyDown: (NSEvent *)theEvent {
    [self runOpenPanel];
}

Так что они оба используют [self runOpenPanel], но в разных контекстах. У меня проблема в том, что runOpenPanel делает несколько вызовов для изменения IBOutlets, например:

-(void)runOpenPanel {
    // Omitting some of the trivial NSOpenPanel code
    [myTextField setStringValue: @"The file name NSString from the aforementioned omitted code."];
}

То есть myTextField обновляется, когда функция запускается кнопкой Interface Builder, но не запускается обработчиком keyDown пользовательского представления. Есть ли способ вызвать runOpenPanel, который позволит ему получить доступ к myTextField? Я пытался использовать [[super self] runOpenPanel] (не смейтесь) и ряд других вещей. Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...