Я почти закончил написание программы для редактирования изображений, но столкнулся с проблемой, что должен иметь простое решение.
По сути, я встроил набор кнопок, 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]
(не смейтесь) и ряд других вещей. Заранее спасибо!