如何从另一个NSView更改NSTextField值(不同的swift文件)

问题描述:

我有两个不同的NSViews
viewAViewA.swift
控制viewB控制ViewB.swift
我想从viewA改变文本框(的NSTextField)是在viewB

如何从另一个NSView更改NSTextField值(不同的swift文件)

我改变它从创造实例viewB viewA,但我得到一个错误

这里是我在创建实例viewA

let myViewB = ViewB() 
myViewB.changeValue = myString 

并在viewB我宣布:

var myString = "" { 
    didSet { 
     myNSTextField.stringValue(myString) 
    } 
} 

这是我得到的错误,当我改变的NSTextField值:

意外发现零而展开的可选值



UPDATE:

file ViewB.swift

class ViewB: NSView { 
    ... 
    @IBOutlet weak var widthTextField: NSTextField! 
    ... 
} 

文件ViewA.swift

let myViewB = ViewB() 

class ViewA: NSView { 
    ... 
    if *statement* { 
      .... 
      myViewB.widthTextField.stringValue("try") // <- here i get the error 
      .... 
    } 
    ... 
} 
+0

我接受这样回答这样的问题:http://*.com/questions/35994684/how-to-get-access-to-property-from-another-class-without-inheritance/35995530#35995530 – Eric

+0

所以我应该但是'让myViewB = ChooseEdit()'在课程外部。但我得到同样的错误。 – Danny182

+0

不,你应该为你生成一个CLASS对象(类似'var myViewB = viewB()'),然后你可以通过执行'var textfield = myviewB.myNextField'来访问viewB的属性' – Eric

我终于修好了!我创建一个包含它需要改变它的文本喜欢这一个变量:(用你的测试项目)

在课堂ViewA

import Cocoa 

var textToSet = "Hello" 

class ViewA: NSView { 
    override func drawRect(dirtyRect: NSRect) { 
     super.drawRect(dirtyRect) 

     // Drawing code here. 
    } 

    @IBAction func editPressed(sender: AnyObject) { 
     textToSet = "No" 
    } 

} 

在课堂ViewB

import Cocoa 

class ViewB: NSView{ 

    @IBOutlet var myTextField: NSTextField! 
    override func drawRect(dirtyRect: NSRect) { 
     super.drawRect(dirtyRect) 

     myTextField.stringValue = textToSet 
     // Drawing code here. 
    } 

} 
+0

谢谢,我需要textFields的实时更新(现在可以确定)。我不知道为什么它还没有在我的项目中工作。完成此操作后,我无法在我的NSTextField中输入任何内容。我稍后会尝试。 – Danny182

+0

这可能是因为你已经禁用了文本编辑,这与这个 – Eric

+0

没有关系。当我在我的项目中添加myTextField.stringValue = textToSet时,我无法编辑textField。我不知道为什么。我在我的代码中评论了所有内容。仍然有这个问题。我创建了另一个_NSTextField_,我仍然有这个问题。 – Danny182

在你的代码生成stringValue的(我认为)的新对象。它是这样工作吗?

class ViewB: NSView { 
    @IBOutlet weak var widthTextField: NSTextField! 
} 
let myViewB = ViewB() 

class ViewA: NSView { 
    if *statement* { 
     myViewB.widthTextField.stringValue = "try" //setting it "try" without recreating the stringValue (done by "()") 
    } 

} 
+0

感谢您的答复。即使使用'myViewB.widthTextField.stringValue =“try”也会出现同样的问题' – Danny182

+0

它在哪一行崩溃?什么是确切的错误?如果您在类ViewA中放置'widthTextField.stringValue =“try”',那么它会起作用吗? – Eric

+0

是的,它的工作原理。它会在你答案的最后一行崩溃。我尝试创建另一个项目:https://dl.dropboxusercontent.com/u/43867401/editTextField.zip启动项目时展开窗口以查看这两个视图。 – Danny182