2015-12-26 11 views
9

Sto cercando di creare un'area di testo modificabile in una NSWindow. Finora riesco a creare una finestra con e aggiungere un campo di testo, ma quando seleziono e digito i caratteri i caratteri vengono echeggiati nella shell e NON nell'area di testo.Come creare un campo di testo modificabile in un'applicazione shell veloce

Nota: Questo non è un progetto Xcode - sto cercando di fare questo in un unico file nella shell - il mio obiettivo è quello di fare questo nel codice solo

Per replicare l'errore inserire il seguente codice in un file (experiment.swift) e dare il comando di shell

> swift experiment.swift 

Ecco il codice


import Cocoa 

class MyAppDelegate: NSObject, NSApplicationDelegate { 

    let window = NSWindow() 
    let ed = NSTextField(frame: NSMakeRect(20, 10, 180, 160)) 

    func applicationDidFinishLaunching(aNotification: NSNotification) { 

    window.setContentSize(NSSize(width:600, height:200)) 
    window.styleMask = NSTitledWindowMask | NSClosableWindowMask | 
         NSMiniaturizableWindowMask | 
         NSResizableWindowMask 

    window.opaque = false 
    window.center(); 
    window.title = "My window" 

    ed.font = NSFont(name:"Helvetica Bold", size:20) 
    ed.stringValue = "edit me" 
    ed.editable = true 
    ed.selectable = true 

    window.contentView!.addSubview(ed) 

    window.makeKeyAndOrderFront(window) 
    window.level = 1 
} 

func applicationWillTerminate(aNotification: NSNotification) { 
    // Insert code here to tear down your application 
} 

} 

let app = NSApplication.sharedApplication() 
let obj = MyAppDelegate() 

app.delegate = obj 
app.run() 

risposta

4

Prima app.run(), aggiungere

app.setActivationPolicy(.Regular) 

Secondo the docs, l'ActivationPolicy default è Prohibited:

  • proibiti

L'applicazione non appare nel Dock e non può creare Windows o essere attivato. [...] Questo è anche il valore predefinito per gli eseguibili con separazione che non hanno Info.plists.

+0

Questo aiuta - ora posso modificare nella finestra, ma quando premo il carrello restituire l'intera linea è selezionata e una nuova linea non viene creata. –

Problemi correlati