swift - 在 NSViewController 子类中组织函数的替代方法?

标签 swift nsviewcontroller

( swift ,OSX)

我目前有一个 View Controller (名为 ViewController),它使用 Storyboard管理我的应用程序的 View , Storyboard由几个用于用户输入的文本框组成。如果用户输入的内容不正确,它会调用一个函数来提醒用户他们的错误(使用 NSAlert 模式),并为他们提供一个选项:重置他们的输入,重置他们的输入和以前的输出,或者关闭窗口。

问题是,单独的警报代码大约有 60 行代码(具有显示适当消息的功能),我想将它移到另一个类中 -- ViewController 的子类,名为 ErrorResponse,因此它仍然可以访问用户界面以适本地重置他们的输入(即清除输入字符串字段),并执行上述其他任务,同时避免 中的大量函数 View Controller

我已经尝试创建 ViewController 的子类,以便继承用户界面属性,我可以简单地访问它们,但是 Xcode 希望子类使用 NSCoder 实现 init 方法。 (据我所知,这是 Xcode 设置 Storyboard或 .xib 以与 Controller 通信的方式,作为 NSViewController 类的一部分,但这与我的实现无关)。当我尝试传递 nil 或默认初始化的 NSCoder() 对象时,我遇到了模糊的崩溃。

那么,有没有办法组织这些功能呢?还是我应该将它们全部保存在 ViewController 中?

编辑:我还有一个名为 ErrorCheck 的现有类,它执行检查以查看是否有任何错误。在 ViewContoller 中,当输入输入时,有一个 guard 语句,其中包含来自 ErrorCheck 的方法,如果输入以某种方式无效,则在 ErrorResponse 中相应的方法被调用。

代码片段:

class ViewController: NSViewController {

    // Input and output text fields
    @IBOutlet weak var inputStr: NSTextField!
    @IBOutlet weak var outputStr: NSTextField!

    // Input and output conversion selection
    @IBOutlet weak var inputSegments: NSSegmentedControl!
    @IBOutlet weak var outputSegments: NSSegmentedControl!

    @IBAction func outputIsSelected(sender: NSSegmentedControl) {

        // Passing all UI elements in (not shown)
        // Not ideal, want to be global obj (see below code)
        guard ErrorCheck().stringIsNotEmpty(inputStr.stringValue) else {
            ErrorResponse().invalidEmptyInput()
            return
        }

        // 0 = DNA, 1 = mRNA, 2 = English
        if (inputSegments.selectedSegment == 0) {
            checkPossibleConversionAndConvertDNA()
        } else if (inputSegments.selectedSegment == 1) {
            checkPossibleConversionAndConvertmRNA()
        } else if (inputSegments.selectedSegment == 2) {
            checkPossibleConversionAndConvertEnglish()
        }

    }
}

如果我不子类化 ViewController,还有另一个问题:我不能为 ErrorResponse 全局定义一个对象,因为我不能在初始化时在同一范围内传递 UI 值,所以目前我有在每个相应的函数中初始化了一个 ErrorCheck 对象......及其困惑。

最佳答案

我最终只是将方法移到了 ViewController 中。不是最漂亮的,但它很实用。

关于swift - 在 NSViewController 子类中组织函数的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36879406/

相关文章:

ios - 在使用共享扩展时从 swift 检索图像到 typescript

objective-c - NSViewController 和界面生成器

ios - 快速将 PFGeoPoint 纬度和经度从解析转换为 CLLocation 纬度和经度

swift - 更改日期选择器的文本颜色

ios - 在同一 View Controller 中的另一个 UIView 后面进行 UIView 更新

swift - 从函数中打开 NSViewController。菜单栏应用

macos - 在 Swift 中检测鼠标在 NSViewController 之外

ios - UICollectionView 不遵守 UICollectionViewDelegateFlowLayout 和插图

swift - NSViewController IBOutlet 始终为零

cocoa - 从 Cocoa 中的其他 nib(即 Interface Builder)加载 nib