[macos/appkit] nsview 如何实现 delphi 的 hint 提示 [未验证]
clq
浏览(129) -
2024-07-13 19:27:28 发表
编辑
关键字:
[macos/appkit] nsview 如何实现 delphi 的 hint 提示
百度搜索 “macos appkit 显示鼠标移动时显示提示” 可知 nsview 自身是没有这个功能的,不过和 delphi 一样可以用鼠标进入和离开事件来实现。
--------------------------------------------------------
Mac开发,实现移动鼠标到指定区域显示提示
// 设置监听
[self.itemButton addTrackingArea:[[NSTrackingArea alloc] initWithRect:self.bounds options:NSTrackingActiveAlways|NSTrackingInVisibleRect|NSTrackingMouseEnteredAndExited owner:self userInfo:nil]];
- (void)mouseEntered:(NSEvent *)event
{
[super mouseEntered:event];
_theMenu = [[NSMenu alloc] initWithTitle:@""];
NSMenuItem *item = [[NSMenuItem alloc]init];
item.title = @"你好啊";
[_theMenu addItem:item3];
[NSMenu popUpContextMenu:_theMenu withEvent:event forView:self.itemButton];
}
- (void)mouseExited:(NSEvent *)event
{
[super mouseExited:event];
[_theMenu removeAllItems];
_theMenu = nil;
}
//--------------------------------------------------------
下面是这个关键词的百度 ai 回答。感觉百度还是弱了点,我多次要 objectc 的,但它一直给我 swift 的提示 ...
在macOS中,要显示鼠标移动时的提示,可以使用NSTrackingArea来跟踪鼠标事件,并使用NSView的addTrackingArea(_:)方法添加一个跟踪区域。以下是一个简单的例子,演示如何在自定义的NSView子类中实现这一功能:
swift
import Cocoa
class CustomView: NSView {
private var trackingArea: NSTrackingArea?
override func updateTrackingAreas() {
super.updateTrackingAreas()
// Remove existing tracking area if any.
if let oldTrackingArea = trackingArea {
self.removeTrackingArea(oldTrackingArea)
}
let options: NSTrackingArea.Options = [.mouseEnteredAndExited, .mouseMoved, .activeInKeyWindow]
trackingArea = NSTrackingArea(rect: self.bounds, options: options, owner: self, userInfo: nil)
if let trackingArea = trackingArea {
self.addTrackingArea(trackingArea)
}
}
override func mouseEntered(with event: NSEvent) {
// 鼠标进入视图时的处理
NSCursor.pointingHand.set() // 例如,改变鼠标光标为指针光标
}
override func mouseMoved(with event: NSEvent) {
// 鼠标在视图内移动时的处理
// 显示提示信息,例如使用弹窗
let message = "Mouse moved at location: \(event.locationInWindow)"
let alert = NSAlert()
alert.messageText = "Mouse Moved"
alert.informativeText = message
alert.runModal()
}
override func mouseExited(with event: NSEvent) {
// 鼠标离开视图时的处理
NSCursor.arrow.set() // 例如,恢复鼠标光标为箭头
}
}
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// 创建自定义视图并添加到主窗口
let view = CustomView(frame: NSRect(x: 0, y: 0, width: 400, height: 300))
let window = NSApplication.shared.windows.first!
window.contentView = view
window.makeKeyAndOrderFront(nil)
}
}
// 在AppDelegate设置应用的代理并启动运行循环
NSApplication.shared.delegate = AppDelegate()
_ = NSApplicationMain(nil, nil)
在这个例子中,CustomView类是一个自定义的NSView子类,它实现了鼠标进入、移动和退出时的处理方法。在mouseEntered方法中,你可以改变鼠标光标或者做其他与鼠标进入相关的处理。在mouseMoved方法中,你可以显示一个提示框,告诉用户鼠标的当前位置。在mouseExited方法中,你可以恢复默认的鼠标光标。
在AppDelegate中,当应用程序完成启动后,创建了一个CustomView实例,并将其设置为主窗口的内容视图。
这个例子提供了一个基本框架,你可以根据自己的需求对其进行扩展和定制。
本帖子属于以下条目()
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.