3

Instead of a TableView I want to use a NSTableCellView inside a custom view. So I created a xib file with a standard NSTableCellView and loaded that into a view.

The table cell view is displayed as expected. But I can't make its textfield the first responder. It's not responding to mouse events and it's not even reacting when I explicitly make it the first responder. makeFirstResponder returns true, but I see no blinking cursor and it doesn't respond to any key events.

Adding a regular textfield to the view does work however.

class ViewController: NSViewController
{

 @IBOutlet var myView: NSView!
 @IBOutlet var cellView: NSTableCellView! //ViewController is the file owner of the xib file

 override func viewDidLoad()
 {
    super.viewDidLoad()
    NSBundle(forClass: ViewController.self).loadNibNamed("Cell", owner: self, topLevelObjects: nil)
    myview.addSubview(cellView)
    cellView.layer?.borderColor = Color.blackColor().CGColor
    cellView.layer?.borderWidth = 1
 }

 override func mouseDown(event: NSEvent)
 {
   let result = self.view.window?.makeFirstResponder(cellView.textField!)
    print(result) //prints true
 }

Why am I doing this? Well, I am trying to understand how a view-based table view would be implemented. It seems that at its core a tableview is just a view with lots of (probably cached and reused?) subviews. Also, I always thought that the number of views was limited for efficiency purposes on OS X?

user965972
  • 2,489
  • 2
  • 23
  • 39

0 Answers0