私の無能さには申し訳ありませんが、私はココア、スウィフト、オブジェクト指向プログラミングの方が一般的です。私の主な情報源は、Cocoa Programming for OS X(5th ed。)、Appleの専門用語とObjective-C-riddled Developerページです。しかし、私はこの問題に言及していることは見ていない(または見たことがない)ため、ここにいる。別のIBカスタムビューでmouseEntered/-Exitedを使用して1つのIBカスタムビューを制御する方法
IB作成のカスタムビュー、LeftViewの内容を、別のIB作成のカスタムビューRightViewのmouseEntered/-Exitedアクションで変更したい。両方が同じウィンドウにあります。私は物事を理解しようとするが、無駄におもちゃのプログラムを作成しました。ここで
は(LeftViewを変更することになっている)RightViewのためのクラス定義です:
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)
}
}
そして、ここでは(RightViewによって変更されることになっている)LeftViewのためのクラス定義です:
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
}
}
私は何か「完全に明白」を欠いていると確信していますが、私はちょっと密度があります。あなたがcode/xibファイルを修正する方法を私に教えることができれば、私は非常に感謝しています。あなたが子供と話すときのように説明することができれば、私はさらに感謝します。私が世界を引き継ぐとき(私はすべてに無能ではない)、私はあなたの親切を覚えています。