3

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 では効率のためにビューの数が制限されているといつも思っていましたか?

4

0 に答える 0