根据 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.stringValue
时codecChosen
变量在我的@IBAction
中为codecSelector
NSPopupButton
方法分配了一个新值。
我怀疑问题是我的outputText
NSTextField
没有设置为在codecSelector
NSPopupButto
n 更改时更新。我需要做什么才能做到这一点?
【问题讨论】:
【参考方案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 与测量单位选择连接到 NSTextField 的呈现方式?
基于视图的 NSTableView 中的 NSPopupButton