Es tut mir leid für meine Inkompetenz, aber ich bin neu in Cocoa, Swift und objektorientierte Programmierung im Allgemeinen. Meine primären Quellen waren Cocoa Programming für OS X (5. Auflage) und Apples Jargon- und Objective-C-gespickte Entwicklerseiten. Aber ich bin hier, weil ich nichts gesehen habe (oder nicht bemerkt habe, dass ich etwas gesehen habe), das auf dieses Problem eingeht.So steuern Sie eine benutzerdefinierte IB-Ansicht mit mouseEntered/-Empfehlen in einer anderen benutzerdefinierten IB-Ansicht
Ich möchte den Inhalt einer IB-erstellten benutzerdefinierten Ansicht, LeftView, durch MouseEntered/-Exited Aktionen in einer anderen IB-erstellte benutzerdefinierte Ansicht, RightView ändern. Beide sind im selben Fenster. Ich habe ein Spielzeugprogramm erstellt, um zu versuchen, die Dinge herauszufinden, aber ohne Erfolg.
Hier ist die Klassendefinition für RightView (die LeftView soll sich ändern):
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)
}
}
Und für LeftView die Klassendefinition ist hier (die von RightView geändert werden soll):
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
}
}
Ich bin sicher, dass ich etwas "völlig offensichtlich" vermisse, aber ich bin ein wenig dicht. Wenn Sie mir sagen könnten, wie man die Code/Xib-Dateien repariert, würde ich es sehr schätzen. Wenn Sie Dinge wie im Gespräch mit einem Kind erklären könnten, wäre ich noch wertvoller. Wenn ich die Welt übernehme (ich bin nicht inkompetent in allem), werde ich mich an deine Freundlichkeit erinnern.