gpt4 book ai didi

swift - 将 NSViewController 的 View 显示为 NSView 的(NSScrollView) subview

转载 作者:行者123 更新时间:2023-11-28 15:32:34 24 4
gpt4 key购买 nike

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

例子: CustomViewController

我的想法是在我点击特定按钮时在 NSScrollView 中显示这些内容。

ScrollViewWithViews

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

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

示例:

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 来触发“close()”函数到每个带有输入的自定义 ViewController。然后在“关闭”功能中的那些 ViewController 上,我执行以下操作:

self.view.removeFromSuperview()

然而,它只是从 scrollView 中删除了一个 ViewController 的 View ,但是 ViewController 本身并没有被释放,而是保留在 viewControlers 中数组(mainViewController 中的变量)

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


现在我想,如果您想在另一个 View 中显示 ViewController 的 View ,或者每个人都以他们更喜欢的方式来处理这种情况,是否有一种通用的方法?

最佳答案

解决方案 A:委托(delegate)。所有 View Controller 都可以有相同的委托(delegate),即主视图 Controller 。关闭 View Controller 是委托(delegate)方法的参数。

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

关于swift - 将 NSViewController 的 View 显示为 NSView 的(NSScrollView) subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44618178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com