将NSViewController的视图显示为NSView(NSScrollView)子视图

时间:2017-06-18 18:27:01

标签: swift cocoa swift3 nsview nsviewcontroller

我有不同的log(b)个多个字段。一个有NSDatePicker, 另一个有NSTextField等等。

实施例: CustomViewController

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

ScrollViewWithViews

所以我提出了下一个解决方案:

我的主mydata=data.frame(x=c(0,5,9,13,17,20),y = c(0,11,20,29,38,45)) myfun=function(a,b,r,t){ prd=a*b*(1-exp(-b*r*t)) return(prd) } myfun1 <- function(logab, data){ sum((data$y - myfun(exp(logab[1]), exp(logab[2]), r = 2, t = data$x)) ^ 2) } ui <- rbind(c(-1,-1), c(1,0), c(-1,0), c(0,-1)) ci <- c(-log(1000), log(1000), -log(3000), 0) init <- log(c(2000, 0.05)) r <- constrOptim(theta = init, f = myfun1, grad = NULL, ui = ui, ci = ci, data = mydata) 类有一个变量 viewControlers:[NSViewController] ,它包含所有自定义ViewController s(具有不同的输入)。当我单击按钮时,我初始化某个ViewController,然后将其视图添加到滚动视图。

Examle:

ViewController

我添加ViewController会触发“close()”函数到每个带输入的自定义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上执行:

ViewController

但是它只从scrollView中删除了ViewController的视图,但是self.view.removeFromSuperview() 本身没有被释放,它仍然保留在 viewControlers 数组中(mainViewController中的变量)

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

<小时/> 现在我想,当你想在另一个视图中呈现ViewController个'视图时,是否有一种常见的方法来处理这种情况,或者每个人都以他们更喜欢的方式进行处理? < p>

1 个答案:

答案 0 :(得分:1)

解决方案A:代表。所有视图控制器都可以具有相同的委托,即主视图控制器。结束视图控制器是委托方法的参数。

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