根据 NSPopupButton 中的选择更新 NSTextField



我只编码了几个星期,所以请原谅我笨拙的代码。

我有一个需要根据NSPopupButton中的选择进行更新的NSTextField

这些是我的出口:

@IBOutlet weak var inputText: NSTextField!
@IBOutlet weak var outputText: NSTextField!
@IBOutlet weak var inputBrowseButton: NSButton!
@IBOutlet weak var outputBrowseButton: NSButton!
@IBOutlet weak var codecSelector: NSPopUpButton!

这些是我的变量:

// derive default path and filename from @IBAction of inputBrowseButton
var defaultUrl: URL! 
// derived from default of inputBrowse unless outputBrowse is used
var outputUrl: URL!
// change output path from @IBAction of outputBrowseButton
var outputDirectory: URL! 
// change path extension from @IBAction of codecSelector NSPopupButton
var codecChosen: String = "" 
// dictionary of arguments to form script for ffmpeg
var ffmpegCodecArg: String = ""

这是我将所有这些结合在一起的方法:

// construct output path for use in ffmpegArguments dictionary and display in outputText NSTextField
func updateOutputText(defaultUrl: URL?, outputDirectory: URL?) -> String {
if defaultUrl != nil && outputDirectory != nil {
let outputFile = defaultUrl!.deletingPathExtension()
let outputFilename = outputFile.lastPathComponent
outputUrl = outputDirectory!.appendingPathComponent(outputFilename)
outputText.stringValue = outputUrl.path + "(codecChosen)"
} else if defaultUrl == nil && outputDirectory != nil {
outputText.stringValue = outputDirectory!.path
} else {
outputUrl = defaultUrl!.deletingPathExtension()
outputText.stringValue = outputUrl.path + "(codecChosen)"
}
return outputText.stringValue
}

现在这个函数不起作用,因为我还没有弄清楚如何调用它。但这是另一个时间的问题,不是我在这里问的。

以前我在跑步

outputUrl = defaultUrl!.deletingPathExtension()
outputText.stringValue = outputUrl.path + "(codecChosen)"

作为我inputBrowseButton@IBAction方法的一部分,我正在运行

let outputFile = defaultUrl!.deletingPathExtension()
let outputFilename = outputFile.lastPathComponent
outputUrl = outputDirectory!.appendingPathComponent(outputFilename)
outputText.stringValue = outputUrl.path + "(codecChosen)"

作为我outputBrowseButton@IBAction方法的一部分。

这工作正常,除了在更新outputText.stringValue时,当我在codecSelectorNSPopupButton方法的@IBAction中为codecChosen变量分配一个新值时。

我怀疑问题是我没有将outputTextNSTextField设置为在codecSelectorNSPopupButton更改时进行更新。我需要做什么才能实现这一目标?

如何在 NSTextField 中设置文本?

这工作正常,除了在更新outputText.stringValue时,当我的编解码器选择变量在我的@IBAction中为编解码器选择器NSPopupButton方法分配一个新值时。

尝试使用单独的方法来更改文本。

func changeText(inputString: String, inputField: NSTextField) {
inputField.stringValue = inputString 
}

更多地分离代码可能会使您在开始时更容易跟踪。我对macOS并不完全熟悉,因此该方法可能不起作用,但是请尝试使用它的原理,看看是否可以进步。

最新更新