【问题标题】:Display NSViewController's view as NSView's (NSScrollView) subview将 NSViewController 的视图显示为 NSView 的 (NSScrollView) 子视图
【发布时间】:2017-06-18 18:27:00
【问题描述】:

我有不同的NSViewControllers,它们有多个字段。一个有 NSDatePicker, 另一个有 NSTextField 等等。

示例:

这个想法是当我点击特定按钮时在 NSScrollView 中显示这些。

于是我想出了下一个解决方案:

我的主要ViewController 类有一个变量viewControlers: [ViewController],它包含所有自定义ViewControllers(具有不同的输入)。当我单击按钮时,我初始化某些ViewController,然后将它的视图添加到滚动视图中。

例子:

let dmyVC = storyBoard.instantiateController(withIdentifier: "DayMonthYearVC") as! DayMonthYearSelectVC
self.viewControlers.append(dmyVC) //add new vc to the array 
scrollView.addSubview(dmyVC.view) //add this VC’s view to a scroll view

我将NSButton 添加到每个带有输入的自定义ViewControllers 中触发“close()”函数。然后在我做的“关闭”功能中的那些ViewControllers:

self.view.removeFromSuperview()

但是它只从滚动视图中删除了ViewController 的视图,但ViewController 本身并没有被释放,它保留在 viewControlers 数组中(mainViewController 中的变量)

我正在考虑创建委托,并在每次按下其中一个视图上的关闭按钮时调用委托方法。在这种情况下,我只需要一个委托数组(对于每个自定义 ViewController)[与包含对所有已创建 ViewControllers 的引用的数组平行]。


现在我想,当你想在另一个视图中呈现ViewControllers 的视图时,是否有一种通用的处理方式,或者每个人都以他们更喜欢的方式来处理?

【问题讨论】:

  • 与问题无关,但scrollView.addSubview(dmyVC.view) 不是您将视图添加到滚动视图的方式。
  • scrollView 只是一个 NSView,后来变成了 ScrollView 的 documentView ( mainScrollView.documentView = scrollView)

标签: swift cocoa swift3 nsview nsviewcontroller


【解决方案1】:

解决方案 A:委托。所有视图控制器都可以具有相同的委托,即主视图控制器。关闭视图控制器是委托方法的一个参数。

解决方案 B:自定义通知。主视图控制器观察通知。关闭视图控制器发布通知并且是通知的对象。

【讨论】:

  • 谢谢,关闭视图控制器作为委托方法的参数的想法比拥有一个委托数组要好得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
相关资源
最近更新 更多