【问题标题】:Update NSTextField based on selection in NSPopupButton根据 NSPopupButton 中的选择更新 NSTextField
【发布时间】: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 更改时更新。我需要做什么才能做到这一点?

【问题讨论】:

    标签: swift xcode cocoa


    【解决方案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 弹出窗口创建了一个方法,并在我的方法中调用它来选择输入和输出文件。现在一切正常。
    • 我很高兴现在一切都为你工作!如果我有帮助,你介意给我一个赞成票吗?
    • 我做了,虽然它不影响可见的分数,因为我也是新人。
    猜你喜欢
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多