Je suis désolée pour mon incompétence, mais je suis novice en matière de programmation orientée objet, Cocoa, Swift et en général. Mes premières sources ont été Cocoa Programming pour OS X (5ème édition), et les pages de jargon d'Apple et de développeur d'Objective-C-criblé. Mais je suis ici parce que je n'ai pas vu (ou je n'ai pas réalisé que j'ai vu) tout ce qui parle de ce problème. Je souhaite modifier le contenu d'une vue personnalisée créée par IB, LeftView, par des actions mouseEntered/-Exited dans une autre vue personnalisée créée par IB, RightView. Les deux sont dans la même fenêtre. J'ai créé un programme de jouets pour essayer de comprendre les choses, mais en vain.Comment contrôler une vue personnalisée IB avec mouseEntered/-Exited dans une autre vue personnalisée de l'IB
est ici la définition de classe pour RightView (qui est censé changer LeftView):
import Cocoa
class RightView: NSView {
override func drawRect(dirtyRect: NSRect) {
// Nothing here, for now.
}
override func viewDidMoveToWindow() {
window?.acceptsMouseMovedEvents = true
let options: NSTrackingAreaOptions =
[.MouseEnteredAndExited, .ActiveAlways, .InVisibleRect]
let trackingArea = NSTrackingArea(rect: NSRect(),
options: options,
owner: self,
userInfo: nil)
addTrackingArea(trackingArea)
}
override func mouseEntered(theEvent: NSEvent) {
Swift.print("Mouse entered!")
LeftView().showStuff(true)
}
override func mouseExited(theEvent: NSEvent) {
Swift.print("Mouse exited!")
LeftView().showStuff(false)
}
}
Et voici la définition de classe pour LeftView (qui est censé être modifié par RightView):
import Cocoa
class LeftView: NSView {
var value: Bool = false {
didSet {
needsDisplay = true
Swift.print("didSet happened and needsDisplay was \(needsDisplay)")
}
}
override func mouseUp(theEvent: NSEvent) {
showStuff(true)
}
override func drawRect(dirtyRect: NSRect) {
let backgroundColor = NSColor.blackColor()
backgroundColor.set()
NSBezierPath.fillRect(bounds)
Swift.print("drawRect was called when needsDisplay was \(needsDisplay)")
switch value {
case true: NSColor.greenColor().set()
case false: NSColor.redColor().set()
}
NSBezierPath.fillRect(NSRect(x: 40, y: 40,
width: bounds.width - 80, height: bounds.height - 80))
}
func showStuff(showing: Bool) {
Swift.print("Trying to show? \(showing)")
value = showing
}
}
Je suis sûr qu'il me manque quelque chose "complètement évident", mais je suis un peu dense. Si vous pouviez me dire comment réparer les fichiers code/xib, je l'apprécierais beaucoup. Si vous pouviez expliquer des choses comme lorsque vous parlez à un enfant, je serais encore plus reconnaissant. Quand je prendrai le contrôle du monde (je ne suis pas incompétent pour tout), je me souviendrai de votre gentillesse.