That's my code:
override func keyDown(theEvent: NSEvent) { super.keyDown(theEvent) switch theEvent.character { case NSLeftArrowFunctionKey: println(1) case NSRightArrowFunctionKey: println(2) case NSDownArrowFunctionKey: println(3) case NSUpArrowFunctionKey: println(4) default: break } } As you can see, I try to recognize if one of arrow buttons was pressed, but it never works. Even the function keyDown never seems to be called.
That's what is written in viewDidAppear, if this can help you to provide the answer:
override func viewDidAppear() { super.viewDidAppear() self.view.window?.styleMask = NSClosableWindowMask | NSMiniaturizableWindowMask | NSTitledWindowMask var frame = self.view.window?.frame var newHeight = CGFloat(438) var newWidth = CGFloat(415) frame?.size = NSMakeSize(newWidth, newHeight) self.view.window?.setFrame(frame!, display: true) self.view.window?.backgroundColor = NSColor.darkGrayColor() } In viewDidLoad I just add some non-selectable and non-editable NSTextFields like that:
var x = CGFloat(0) var y = CGFloat(0) var tag = 1 for var i = 0; i < 4; i++ { for var j = 0; j < 4; j++ { var tile = NSTextField(frame: NSRect(x: x, y: y, width: 100, height: 100)) tile.enabled = false tile.stringValue = "" tile.font = NSFont(name: "Helvetica", size: 75) tile.backgroundColor = NSColor.lightGrayColor() tile.editable = false tile.selectable = false tile.drawsBackground = true tile.alignment = NSTextAlignment(rawValue: 2)! tile.tag = tag x += 105 ar.append(tile) self.view.addSubview(tile) tag++ } x = 0 y += 105 } I just have no idea why keyDown doesn't work, so I'll really appreciate any help.
EDIT:
The whole class code:
import Cocoa import AppKit import Foundation class _048Main: NSViewController { var ar : Array<NSTextField> = [] var left = 0 var dict : Dictionary<Int, NSColor> = [:] var pic2 = NSColor.redColor() var pic4 = NSColor.whiteColor() var pic8 = NSColor.orangeColor() var pic16 = NSColor.magentaColor() var pic32 = NSColor() var pic64 = NSColor() var pic128 = NSColor() var pic256 = NSColor() // Some colors will be added var pic512 = NSColor() var pic1024 = NSColor() var pic2048 = NSColor() override func viewDidLoad() { super.viewDidLoad() dict[2] = pic2 dict[4] = pic4 dict[8] = pic8 dict[16] = pic16 dict[32] = pic32 dict[64] = pic64 dict[128] = pic128 dict[256] = pic256 dict[512] = pic512 dict[1024] = pic1024 dict[2048] = pic2048 var x = CGFloat(0) var y = CGFloat(0) var tag = 1 for var i = 0; i < 4; i++ { for var j = 0; j < 4; j++ { var tile = NSTextField(frame: NSRect(x: x, y: y, width: 100, height: 100)) tile.enabled = false tile.stringValue = "" tile.font = NSFont(name: "Helvetica", size: 75) tile.backgroundColor = NSColor.lightGrayColor() tile.editable = false tile.selectable = false tile.drawsBackground = true tile.alignment = NSTextAlignment(rawValue: 2)! tile.tag = tag x += 105 ar.append(tile) self.view.addSubview(tile) tag++ } x = 0 y += 105 } left = 16 generateTile() generateTile() } func generateTile() { var r = Int(arc4random_uniform(UInt32(left))) var tmp = 0 for var i = 0; i < 16; i++ { if ar[i].stringValue == "" { if tmp == r { var t = Int(arc4random_uniform(10)) switch t { case 0...1: ar[i].stringValue = "2" ar[i].backgroundColor = pic2 default: ar[i].stringValue = "4" ar[i].backgroundColor = pic4 } left-- break } tmp++ } } } override func viewDidAppear() { super.viewDidAppear() self.view.window?.styleMask = NSClosableWindowMask | NSMiniaturizableWindowMask | NSTitledWindowMask var frame = self.view.window?.frame var newHeight = CGFloat(438) var newWidth = CGFloat(415) frame?.size = NSMakeSize(newWidth, newHeight) self.view.window?.setFrame(frame!, display: true) self.view.window?.backgroundColor = NSColor.darkGrayColor() } override func keyDown(theEvent: NSEvent) { super.keyDown(theEvent) switch theEvent.character { case NSLeftArrowFunctionKey: println(1) case NSRightArrowFunctionKey: println(2) case NSDownArrowFunctionKey: println(3) case NSUpArrowFunctionKey: println(4) default: super.mouseDown(theEvent) } } }
.character? And what about your other similar question?keyDownwhile editing text field. And now it's not editable, but the function doesn't work