Перерисовать NSTableView с новыми данными из файла, когда NSViewController перезагружен? - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть приложение на основе Mac OS X Document, в котором есть несколько NSViewController, между которыми я переключаюсь, и каждое представление отображает данные из plist-файлов в NSTableViews на основе пользовательских выборов в NSTableView предыдущего NSViewController. У меня проблема в том, что я не могу понять, какую функцию можно вызывать каждый раз, когда загружается NSViewController, для чтения правильных данных из файла для отображения в NSTableView. Для UIViewControllers я использовал семейство функций viewDidLoad, viewWillAppear, но мне не удалось найти соответствующие функции для NSViewController.

В настоящее время я использую awakeFromNib, который работает нормально, но только при первой загрузке NSViewController. Я пробовал loadView, но это сворачивает NSView. Я предполагаю, что мне нужно сделать больше настроек для использования loadView.

Я использую код View Swapping из книги Хиллегаса «Программирование какао для MAC OS X», которая переключает ViewControllers со следующим кодом:

  - (void)displayViewController:(ManagingViewController *)vc
                   curBox: (NSBox *)windowBox

  {
// End editing
NSWindow *w = [windowBox window];
BOOL ended = [w makeFirstResponder:w];
if (!ended) {
    NSBeep();
    return;
}
NSView *v = [vc view];

NSSize currentSize = [[windowBox contentView] frame].size;

NSSize newSize = [v frame].size;

float deltaWidth  = newSize.width  - currentSize.width;
float deltaHeight = newSize.height - currentSize.height;

NSRect windowFrame = [w frame];
windowFrame.size.height += deltaHeight;
windowFrame.origin.y -= deltaHeight;
windowFrame.size.width += deltaWidth;

[windowBox setContentView:nil];
[w setFrame:windowFrame
    display:YES
    animate:YES];

[windowBox setContentView:v];

// Put the view controller in the responder chain

[v setNextResponder:vc];
[vc setNextResponder:windowBox];
 }

и помещает контроллер NSView в цепочку респондента.

Есть ли какая-нибудь функция, которую я могу вызывать для настройки представления каждый раз, когда меняю NSViewControllers? Могу ли я проверить, что NSViewController стал firstResponder?

1 Ответ

0 голосов
/ 03 марта 2011

Этот пост предоставил ответ.

Я добавил следующий код:

- (void)viewWillLoad {

}

- (void)viewDidLoad {

}

- (void)loadView {
[self viewWillLoad];
[super loadView];
[self viewDidLoad];
}

и в начале displayViewController я добавил

[vc loadView]
...