TableView の代わりに、カスタム ビュー内で NSTableCellView を使用したいと考えています。そこで、標準の NSTableCellView を使用して xib ファイルを作成し、それをビューにロードしました。
テーブル セル ビューは期待どおりに表示されます。しかし、そのテキストフィールドをファーストレスポンダーにすることはできません。マウスイベントに応答しておらず、明示的にファーストレスポンダーに設定しても反応しません。makeFirstResponder は true を返しますが、点滅するカーソルが表示されず、キー イベントに応答しません。
ただし、ビューに通常のテキストフィールドを追加しても機能します。
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
}
なぜ私はこれをしているのですか?さて、ビューベースのテーブル ビューがどのように実装されるかを理解しようとしています。テーブルビューの核心は、多くの(おそらくキャッシュされて再利用された?)サブビューを持つ単なるビューであるようです。また、OS X では効率のためにビューの数が制限されているといつも思っていましたか?