将值从inputField传递到NSTextField

时间:2017-11-12 09:28:41

标签: macos swift4 nstextfield

我想按一个按钮将字符串值从一个NSTextField传递到另一个NSTextField。我用这个for-in loop。我需要将值从inputField传递到visibleText1,然后传递到visibleText2,然后传递到visibleText3。但它不起作用。

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var inputField: NSTextField!
    @IBOutlet weak var visibleText1: NSTextField!
    @IBOutlet weak var visibleText2: NSTextField!
    @IBOutlet weak var visibleText3: NSTextField!

    func applicationDidFinishLaunching(aNotification: NSNotification) { }
    func applicationWillTerminate(aNotification: NSNotification) { }

    @IBAction func applyButton(sender: AnyObject) {      
        for u in (visibleText1.stringValue...visibleText3.stringValue) {
            visibleText.stringValue[u] = inputField.stringValue
            inputField.stringValue = ""
        }
    }
}

Xcode给我一个错误:

// Type 'ClosedInterval<String>' does not conform to protocol 'SequenceType' 

该怎么做?

enter image description here

2 个答案:

答案 0 :(得分:3)

不可以,因为您无法创建不同文本字段的字符串值范围。

您可以创建三个字段的数组并枚举:

@IBAction func applyButton(sender: AnyObject) {      
    for field in [visibleText1, visibleText2, visibleText3] {
        field.stringValue = inputField.stringValue
    }
    inputField.stringValue = ""
}

或使用forEach功能

@IBAction func applyButton(sender: AnyObject) {      
    [visibleText1, visibleText2, visibleText3].forEach {
        $0.stringValue = inputField.stringValue
    }
    inputField.stringValue = ""
}

重复循环中重置inputField将始终在第一次迭代后应用空字符串。

答案 1 :(得分:1)

这有几个问题,但我会从的工作开始:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var inputField: NSTextField!
    @IBOutlet weak var visibleText1: NSTextField!
    @IBOutlet weak var visibleText2: NSTextField!
    @IBOutlet weak var visibleText3: NSTextField!

    func applicationDidFinishLaunching(aNotification: NSNotification) { }
    func applicationWillTerminate(aNotification: NSNotification) { }

    @IBAction func applyButton(sender: AnyObject) {      
        for u in [visibleText1, visibleText2, visibleText3] {
            u.stringValue = inputField.stringValue
        }
    }
}

原来错了什么?

1)您的(visibleText1.stringValue...visibleText3.stringValue)类型为String ... String,这不是您的意图。你需要有一个NSTextField s的数组。

2)visibleText.stringValue[u]甚至都不是。没有变量visibleString,即使它是NSTextField - 我认为这是你想要的变量,它的.stringValueString ,而不是数组。

3)你在for循环中设置inputField.stringValue = ""是做什么的?如果您的构造有效,则只会设置第一个字段。

4)不是错误,但为什么你在NSApplicationDelegate内而不是一个viewController进行所有这些?