根据 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的主要内容,如果未能解决你的问题,请参考以下文章

在加载表单时恢复对 NSPopUpButton 的选择

如何将 NSPopUpButton 与测量单位选择连接到 NSTextField 的呈现方式?

oc之mac中NSPopUpButton

基于视图的 NSTableView 中的 NSPopupButton

NSPopUpButton:多个值和 selectedIndex 绑定

使用三个相关的 NSPopUpButton 在 CoreData 中设置值