Я думаю, что этот ответ на самом деле не решает вашу проблему, но, возможно, помогает понять, что происходит с раскадровками и прокрутками. Я думаю, что Apple все еще нужно исправить некоторые проблемы с раскадровкой. Я пытался использовать представление коллекции с раскадровками, но невозможно подключить collectionViewItem в построителе интерфейса (что происходит автоматически с xib).
Вот пример с представлениями коллекции:
- Перетащите представление коллекции в viewController. Вы увидите представление коллекции и появление collectionViewItem. Но элемент представления коллекции НЕ связан с представлением коллекции. Если вы попытаетесь сделать это с помощью IB, ничего не произойдет.
- В инспекторе удостоверений IB назначьте идентификатор Soryboard. Это случайное имя, которое позже будет использовано в коде. Здесь я использую "MyCollectionView"
- Если вы используете swift, выберите имя вашего проекта в модуле. Код в основном такой же для objC
- Подключите представление коллекции к ViewController, содержащему представление коллекции.
Напишите немного кода, чтобы подключить элемент Collection View.
class IVMyCollectionViewController: NSViewController, NSCollectionViewDelegate {
// manual connections to collection view (which is not working in IB)
@IBOutlet weak var collectionView: NSCollectionView!
class var sharedInstance : IVMyCollectionViewController {
struct Static {
static var instance:IVMyCollectionViewController? = nil
}
if Static.instance != nil {
return Static.instance!
} else {
let bundle = NSBundle.mainBundle()
let infoDict = bundle.infoDictionary!
let sbName = infoDict["NSMainStoryboardFile"] as String
let storyboard = NSStoryboard(name:sbName, bundle:bundle)!
let vcName = "MyCollectionView"
let sbInstance = storyboard.instantiateControllerWithIdentifier(vcName) as IVMyCollectionViewController
Static.instance = sbInstance
return sbInstance
}
}
// implement your controller
}
Это означает, что некоторые элементы пользовательского интерфейса еще не реализованы должным образом. Я бы отправил отчет об ошибке в Apple. В конструкторе интерфейсов по-прежнему многого не хватает.
Прямо сейчас я бы использовал смесь раскадровки и xibs, чтобы злоупотреблять раскадровкой, как описано выше, путем создания экземпляра соединения в конструкторе контроллера. Вы можете использовать идентификатор раскадровки для запуска представлений и других представлений или загрузки из xibs. Вы можете разместить viewControllers внутри раскадровки без соединений (segues), чтобы создать пул представлений, которые можно использовать как xibs. (ViewController более или менее похож на xib)
// objC
DetailViewController* controller = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
или создайте экземпляр, используя идентификатор раскадровки, как указано выше.
Попробуйте создать представление прокрутки в раскадровке. Создайте представления, которые вы хотите отображать в viewControllers для каждого представления. Ваш контроллер представления scrollviews должен иметь соединение с самим представлением прокрутки. В следующем примере выход представления прокрутки называется «self.contentView»:
// instantiate a view controller for your scrolling view
self.scrollingViewController = [[ScrollingViewController alloc] initWithNibName:@"ScrollingView" bundle:nil];
// or do the same with storyboards by instantiating view controllers by ID
self.scrollingViewController = [myStoryboard instantiateControllerWithIdentifier:@"MyScrollingViewID"];
// Then set the view from the controller as content view
[self.contentView setDocumentView:self.scrollingViewController.view];
[self.contentView.contentView scrollPoint:NSMakePoint(0., self.scrollingViewController.view.frame.size.height)];
Это точно так же, как смешать объективный C и быстрый код. Apple, похоже, вступила на путь перехода, который не был пройден до конца.
В общем, вы должны думать, что View- или WindowControllers в раскадровках - это то же самое, что и полный xib-файл. Если вы хотите использовать больше представлений, используйте представления-контейнеры в раскадровках. FilesOwner в xibs — это viewController в раскадровках. Контейнерные представления предлагают вам возможность создать пару представлений, прикрепленных к контроллеру представления. Механизм перехода доступен для контейнеров. Я думаю, что механизм просмотра прокрутки OS X не элегантен. Я тоже много с этим боролся.
Удачи!
person
JackPearse
schedule
12.12.2014