Невозможно установить позицию NSWindow - PullRequest
3 голосов
/ 30 сентября 2010

У меня есть класс, который расширяет NSWindowController, и я пытаюсь расположить окно, которым он управляет. Окно отображает все ожидаемое содержимое и функции правильно, но когда я пытаюсь расположить его начальную позицию на экране в методе initWithWindowNibName, позиция не меняется. Вот код:

NSPoint p = NSMakePoint(100, 50);
[[self window] setFrameTopLeftPoint:p];

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

Спасибо за любые идеи.

(Нашел проблему. У меня не было окна, подключенного к классу в IB.)

Ответы [ 2 ]

3 голосов
/ 30 сентября 2010

У Wevah есть правильная идея, хотя я попытаюсь немного расширить ее.

Если бы вы попытались добавить эту строку в ваш initWithWindowNibName: метод:

NSLog(@"window == %@", [self window]);

Скорее всего, вы увидите следующий вывод на консоль:

window == (null)

Другими словами, окно по-прежнему nil, так как init* методы находятся на столь раннем этапе жизни объекта, что многие IBOutlets или элементы пользовательского интерфейса еще не совсем «подключены».

Отправка сообщения на nil совершенно нормально: его просто игнорируют.Таким образом, в основном ваша попытка позиционирования окна не имеет никакого эффекта, потому что она в основном равняется [nil doSomething];

Ключом является то, чтобы выполнить позиционирование окна позже во время жизни объекта контроллера, где IBOutlet s и другие объекты пользовательского интерфейса правильно подключены.Как упоминал Вева, одним из таких методов, где все правильно подключено, является

- (void)awakeFromNib;

или, в случае NSWindowController, следующий метод:

- (void)windowDidLoad;

Надеюсь, этопомогает ...

1 голос
/ 30 сентября 2010

Попробуйте ввести этот код в awakeFromNib.

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