2017-08-23 15 views
0

osxの場合はスウィフト4で作業しています。 私は4列のビューベースのNSTableViewを持っています。各列の 細胞が同じカスタムセルクラスを持っている:ユーザーが行の上にマウスで行けば、btnInfoがあるべきマウスが横になっている場合は、1つの列のボタンを非表示にします

class CustomCell: NSTableCellView { 


    @IBOutlet weak var btnInfo: NSButton! 

    private var trackingArea: NSTrackingArea! 


    override func awakeFromNib() { 
     super.awakeFromNib() 

     self.trackingArea = NSTrackingArea(
      rect: bounds, 
      options: [.activeAlways, .mouseEnteredAndExited], 
      owner: self, 
      userInfo: nil 
     ) 
     addTrackingArea(trackingArea) 
    } 


    override func mouseEntered(with event: NSEvent) { 
     super.mouseEntered(with: event) 
      btnInfo.isHidden = false 
    } 

    override func mouseExited(with event: NSEvent) { 
     super.mouseExited(with: event) 
      btnInfo.isHidden = true 
    } 


} 

今私は、次のような状況を実現したいと思います表示され、再度非表示にすると、マウスが行を離れます。このボタンは、唯一の4欄で提供されていますので:

問題はbtnInfoが論理的に

はnilとなりますので、私のアプリは、クラッシュすること、(上記のコードで)です。他のすべての列には が含まれています。

どうすればこの問題を解決できますか?

+0

複数のテーブルセルビューを使用できます。このセルビューを4列目に戻し、デフォルトのセルビューまたは別のカスタムセルビューを返します。 – vadian

+1

あなたは間違った場所でそれをやっています。それはコントローラではないので、NSTableCellViewの仕事ではありません。 –

答えて

0

解決策は、個々のセルではなく、ビュー全体にNSTrackingAreaを追加することです。その後、テーブルビュー全体でマウス移動イベントを取得するには、NSEventlocationInWindowを入力します。次に、NSTableViewには、ボタンを強調表示する現在の行を取得する方法row(at point: NSPoint) -> Intがあります。

関連する問題