2013-08-15 2 views
4

Когда я создаю новый проект OSX в XCode 4.6 и выбираю шаблон приложения Cocoa, то, что я впоследствии вижу в Interface Builder, это NSWindow, NSMenu (предварительно заполненный некоторыми пунктами меню) и NSView внутри NSWindow , Однако, когда я пытаюсь удалить NSView и заменить его с помощью NSTableView или встроить NSView в NSScrollView, я не могу этого сделать.Как удалить или заменить автоматически добавленный NSView в Interface Builder?

Является ли автоматически созданный NSView особенным? Требует ли NSWindow NSView сидеть поверх него и не допускать, чтобы какой-либо другой подкласс, такой как NSTableView или NSCollectionView, был корневым представлением в иерархии? Я знаю, что могу изменить класс в Identity Inspector, но это, похоже, ничего не делает. Любые идеи или подсказки для этого новичка?

ответ

5

Это представление содержимого окна. Все окна должны содержать один, чтобы содержать их содержимое, поэтому по умолчанию оно предоставляется по умолчанию. Хотя для представления содержимого можно использовать любое представление (используя код setContentView: в коде), Interface Builder в настоящее время не позволяет вам его заменять, возможно, потому, что он может иметь неожиданные результаты.

Если у вас нет веских причин для замены содержимого, лучше просто поместить в него свое представление. Вы можете сделать свой вид полностью занятым и использовать маску авторезистировки или автоматические ограничения макета, чтобы сохранить ее таким образом. Это приведет к тому, что ваше представление будет отображаться в виде содержимого, с той лишь разницей, что это дополнительный уровень иерархии представлений.

Если вы действительно хотите изменить представление контента, вы можете сделать это в Interface Builder, установив собственный класс. Однако, как вы видели, это не означает, что представление действует так, как вы выбрали. Интерфейс Builder игнорирует пользовательский класс с целью отображения представления и выбора его параметров, при этом соответствующий класс используется во время выполнения. Это нежелательно для большинства ситуаций, так как вы не можете указать какие-либо настройки.

Лучший способ изменить вид содержимого - это сделать его в коде. Вы можете создать представление в Interface Builder, которое не находится в любом окне, и построить в нем свою иерархию. Затем, после загрузки nib, но до того, как будет показано окно, ваш код заменит содержимое содержимого по умолчанию на вашем собственном. Например, если объект обладает свойствами, называется window и newContentView, это может изменить представление содержимого и отображения окна, как это:

[self.window setContentView:self.newContentView]; 
[self.window makeKeyAndOrderFront:nil]; 
Смежные вопросы