根据 NSPopupButton 中的选择更新 NSTextField

Posted

技术标签:

【中文标题】根据 NSPopupButton 中的选择更新 NSTextField【英文标题】:Update NSTextField based on selection in NSPopupButton 【发布时间】:2019-10-15 20:07:21 【问题描述】:

我只写了几个星期的代码,所以请原谅我毫无疑问的笨拙代码。

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

这些是我的分店:

@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.stringValuecodecChosen 变量在我的@IBAction 中为codecSelector NSPopupButton 方法分配了一个新值。

我怀疑问题是我的outputText NSTextField 没有设置为在codecSelector NSPopupButton 更改时更新。我需要做什么才能做到这一点?

【问题讨论】:

【参考方案1】:

How do you set the text in an NSTextField?

效果很好,除了在我的 @IBAction 中为 codecSelector NSPopupButton 方法分配了一个新值时更新 outputText.stringValue 时。

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

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

更多地分离您的代码可能会让您在开始时更容易跟踪。我对 macOS 不是很熟悉,所以这个方法可能行不通,但是你可以试试它的原理,看看你能不能进步。

【讨论】:

您好,谢谢。如果我明白你在说什么,我想这就是我试图用我包含的功能做的事情,从func updateOutputText(defaultUrl: URL?, outputDirectory: URL?) -> String 开始,我将努力开始工作。但我的问题是,当构建字符串 (codecChosen) 所需的变量之一的值根据我的 NSPopupButton 的输入发生变化时,更新 NXTextField。你是说如果我让我的单独功能正常工作,这应该会自动发生吗? 我想我明白你现在在说什么了。我调用了该函数来更新我的 IBaction 方法中的 outputText 字段以用于 codecSelector 弹出窗口,它现在正在工作。我现在只需要弄清楚弹出窗口默认设置的问题。 ... 我以非常相似的方式进行了操作。我为 codecSelector 弹出窗口创建了一个方法,并在我的方法中调用它来选择输入和输出文件。现在一切正常。 我很高兴现在一切都为你工作!如果我有帮助,你介意给我一个赞成票吗? 我做了,虽然它不影响可见的分数,因为我也是新人。

以上是关于根据 NSPopupButton 中的选择更新 NSTextField的主要内容,如果未能解决你的问题,请参考以下文章