问题描述
我试图创建一个实时文本字段,并在标签中显示输入的字符串,但我不知道如何实现。
我现在所能做的只是通过单击按钮显示文本,但是我想跳过此按钮。该怎么做?
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var namefiled: NSTextField!
@IBOutlet weak var Mylabel: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedobject: Any? {
didSet {
// Update the view,if already loaded.
}
}
@IBAction func SayHelloButtonClick(_ sender: Any) {
let name:String = namefiled.stringValue
let greeting:String = "Hello \(name)!"
Mylabel.stringValue = greeting
}
}
解决方法
执行此操作的方法可能不止一种,但是子类化NSTextField并使用NSTextFieldDelegate进行文本更改是一种方法。可以在终端中运行,方法是将源代码复制/粘贴到名为“ txtfld.swift”的文件中,然后使用下面给出的命令行代码。
/*
To run in Terminal: swiftc -framework Cocoa txtfld.swift -o txtfld && ./txtfld
*/
import Cocoa
var label: NSTextField!
class TextField: NSTextField,NSTextFieldDelegate {
func controlTextDidChange(_ obj: Notification){
label.stringValue = "Hello " + self.stringValue
}
}
var txtFld = TextField()
class ApplicationDelegate: NSObject,NSApplicationDelegate {
var window: NSWindow!
func buildMenu() {
let mainMenu = NSMenu()
NSApp.mainMenu = mainMenu
// **** App menu **** //
let appMenuItem = NSMenuItem()
mainMenu.addItem(appMenuItem)
let appMenu = NSMenu()
appMenuItem.submenu = appMenu
appMenu.addItem(withTitle: "Quit",action:#selector(NSApplication.terminate),keyEquivalent: "q")
}
func buildWnd() {
let _wndW:CGFloat = 400
let _wndH:CGFloat = 150
window = NSWindow(contentRect: NSMakeRect( 0,_wndW,_wndH ),styleMask: [.titled,.closable,.miniaturizable],backing: .buffered,defer: false)
window.center()
window.title = "Swift Test Window"
window.makeKeyAndOrderFront(nil)
// **** Text Field Subclass **** //
txtFld = TextField (frame:NSMakeRect( 30,_wndH - 40,120,24 ))
window.contentView!.addSubview(txtFld)
txtFld.delegate = txtFld
// ***** Text Field as Label **** //
label = NSTextField (frame:NSMakeRect( 160,180,24 ))
window.contentView!.addSubview (label)
label.backgroundColor = NSColor.clear
label.isSelectable = false
label.isBordered = false
label.font = NSFont( name:"Lucida Grande",size:14 )
// === Quit btn === //
let quitBtn = NSButton (frame:NSMakeRect( _wndW - 50,5,40,40 ))
quitBtn.bezelStyle = NSButton.BezelStyle.circular
quitBtn.title = "Q"
quitBtn.action = #selector(NSApplication.terminate)
window.contentView!.addSubview(quitBtn)
}
func applicationDidFinishLaunching(_ notification: Notification) {
buildMenu()
buildWnd()
}
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
}
let appDelegate = ApplicationDelegate()
let application = NSApplication.shared
application.setActivationPolicy(.regular)
application.delegate = appDelegate
application.activate(ignoringOtherApps:true)
application.run()