gpt4 book ai didi

swift - 如何使用鼠标在另一个 IB 自定义 View 中进入/退出来控制一个 IB 自定义 View

转载 作者:行者123 更新时间:2023-11-30 13:13:48 27 4
gpt4 key购买 nike

对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满行话和 Objective-C 的开发者页面。但我来这里是因为我还没有看到(或者没有意识到我看到)任何与这个问题有关的东西。

我想通过另一个 IB 创建的自定义 View RightView 中的鼠标输入/退出操作来更改一个 IB 创建的自定义 View LeftView 的内容。两者都在同一个窗口中。我创建了一个玩具程序来尝试解决问题,但没有成功。

这是 RightView 的类定义(应该更改 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)
}
}

这是 LeftView 的类定义(应该由 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
}
}

我确信我错过了一些“完全明显”的东西,但我有点笨。如果您能告诉我如何修复 code/xib 文件,我将非常感激。如果您能解释一下与 child 交谈时的情况,我会更加感激。当我接管这个世界时(我并非事事无能),我会记住你的恩情。

最佳答案

我想出了一个比我之前的策略简单得多的解决方法。我没有在一个自定义 View 中使用 mouseEntered/-Exited 操作尝试控制另一个自定义 View 中显示的内容,而是只需将 mouseEntered/-Exited 代码放入我想要控制的 View 中,然后更改 rect: 的位置NSTrackingArea

在通过这种方法移动代码之前,我尝试将 owner: 中的 NSTrackingArea 更改为 LeftView(),然后仅移动 mouseEntered/-Exited 代码。这产生了很多可怕的错误消息(天真的新手在这里说话),所以我放弃了它。不过,如果知道如何正确分配 self 以外的所有者,那就太好了。

无论如何,如果有任何进一步的想法或见解,我们将不胜感激。

关于swift - 如何使用鼠标在另一个 IB 自定义 View 中进入/退出来控制一个 IB 自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38447885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com