2010-09-29 6 views
3

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

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

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

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

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

+0

Недостаточно декларации и одной строки кода. Если я копирую и вставляю этот код в свою программу, он будет работать, то есть я не могу воспроизвести вашу ошибку. – Chuck

ответ

1

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

3

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

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

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

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

window == (null) 

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

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

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

- (void)awakeFromNib; 

или в случае NSWindowController, следующие один, а также:

- (void)windowDidLoad; 

Надеется, что это помогает ...

Смежные вопросы