Je travaille avec swift 4 pour osx. J'ai une vue basée NSTableView avec 4 colonnes. les cellules dans chaque colonne a obtenu la même classe de cellules personnalisée:les boutons rapides d'unhide dans une colonne si la souris est sur la rangée
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
}
}
Maintenant, je voudrais réaliser la situation suivante:
si l'utilisateur va de pair avec la souris sur une ligne, la btnInfo devrait être visible et se cacher à nouveau, la souris quitte la rangée.
problèmeest (avec le code ci-dessus), que mes accidents d'applications, car btnInfo sera nul
Logiquement: Parce que ce bouton est uniquement dans la colonne 4 disponibles. dans toutes les autres colonnes, il sera nul.
comment puis-je résoudre ce problème?
Vous pouvez utiliser plusieurs vues de cellule de tableau. Renvoie cette vue de cellule pour la colonne 4 et renvoie la valeur par défaut - ou une autre vue de cellule personnalisée - pour les autres. – vadian
Vous le faites au mauvais endroit. Ce n'est pas le travail de NSTableCellView car ce n'est pas un contrôleur. –