我认为这个答案并不能真正解决您的问题,但可能有助于理解故事板和滚动视图的内容。我认为苹果仍然需要解决一些故事板问题。我尝试将集合视图与情节提要一起使用,但无法在界面构建器中连接 collectionViewItem(这是通过 xibs 自动发生的)。
以下是集合视图的示例:
- 将集合视图拖放到 viewController。您将看到一个集合视图和一个 collectionViewItem 出现。但是集合视图项未连接到集合视图。如果您使用 IB 尝试此操作,则不会发生任何事情。
- 在 IB 的身份检查器中分配一个 Soryboard ID。这是一个随机名称,稍后将在代码中使用。在这里我使用“MyCollectionView”
- 如果使用 swift,请在 Module 中选择您的项目名称。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
}
这意味着一些UI 元素尚未正确实现。我会向苹果发送错误报告。界面构建器中仍然缺少很多东西。
现在,我将使用故事板和 xib 的混合物,通过在控制器的构造函数中实例化连接来以上述方式滥用故事板。您可以使用 storyboardID 来启动视图和其他视图或从 xibs 加载。您可以将 viewControllers 放置在没有连接(segues)的情节提要中,以创建可以像 xibs 一样使用的视图池。(viewController 和 xib 差不多)
// objC
DetailViewController* controller = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
或使用上面的 storyboardID 实例化。
尝试在情节提要中创建滚动视图。为每个视图创建您希望在 viewControllers 中显示的视图。您的滚动视图视图控制器应该与滚动视图本身有连接。在下面的例子中,滚动视图的出口被命名为“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 和 swift 代码一样。苹果似乎进入了一条没有走到尽头的转型之路。
一般来说,您应该认为情节提要中的 View- 或 WindowController 与完整的 xib 文件相同。如果您想使用更多视图,请在情节提要中使用容器视图。xibs 中的 FilesOwner 是 storyboards 中的 viewController。容器视图使您能够创建附加到视图控制器的几个视图。segue 机制可用于容器。我认为 OS X 的滚动视图机制并不优雅。我也为此苦苦挣扎。
祝你好运!