私は各行にNSTrackerAreaを持つビューベースのNSTableViewを持っています。 NSTableViewにはユーザーのリストが含まれており、ユーザーが参加して離脱すると更新されます。これは新しいセルを作成する方法です。TableCellViewsで古いNSTrackingAreasを処理/処分する方法は?
let cell = tableView.make(withIdentifier: "username",
owner: self) as! NSTableCellView
let aera = NSTrackingArea.init(rect: cell.bounds, options [
NSTrackingAreaOptions.activeInKeyWindow,
NSTrackingAreaOptions.inVisibleRect,
NSTrackingAreaOptions.mouseEnteredAndExited],
owner: self, userInfo: nil)
cell.textField?.stringValue = name
cell.addTrackingArea(aera)
return cell
トラッキングエリアは機能しますが、この実装では複数のトラッキングエリアが作成されます。
例:チャットルームに10人のユーザーがおり、ユーザー2が離席しています。新しいユーザーが参加し、テーブルビューで行を取得します。しかし、このViewCellには2つのトラッカーがあり、それぞれが重なっています。これはいくつかの問題を引き起こす。
さらに悪いことに、.reloadData()を使用すると、すべての行に対して新しいトラッカーが作成されます。私は.updateTrackingAreas()を使い、NSTableCellViewをサブクラス化してdeinitでトラッカーを削除しようとしましたが、nietherは動作します。私はまた、セル内で直接行うのではなく、各行のトラッカーを作成しようとしましたが、それを取り除くスキルはありませんでした。
ご意見はありますか?事前に感謝します!