我正在尝试实现自己的自动补全系统(结果是从sqlite数据库中提取的)
我已经设置了NSTextField和适当的委托。每当NSTextField中的文本更改时,它都会调用- (void)controlTextDidChange:(NSNotification *)aNotification方法
它工作正常,在这种方法中,我以编程方式构建菜单,最后使用该代码调用/显示了它:
NSRect frame = [address frame];
NSPoint menuOrigin = [[address superview] convertPoint:NSMakePoint(frame.origin.x, frame.origin.y+frame.size.height-25)
toView:nil];
NSEvent *event = [NSEvent mouseEventWithType:NSLeftMouseDown
location:menuOrigin
modifierFlags:NSLeftMouseDownMask // 0x100
timestamp:0
windowNumber:[[address window] windowNumber]
context:[[address window] graphicsContext]
eventNumber:0
clickCount:1
pressure:1];
[NSMenu popUpContextMenu:menu withEvent:event forView:address];
Run Code Online (Sandbox Code Playgroud)
哪里address是我NSTextField和menu我的NSMenu。问题在于菜单是焦点所在,因此您只能在文本字段中键入1个字母,然后再也不能键入文本,因为菜单现在是第一响应者。
我的问题是如何显示菜单并保持文本字段为第一响应者,以便您可以在字段中每次更改文本时重新加载菜单时键入文本。
实际上,它应该像在Safari或chrome地址栏中。
我为 Mac 制作了一个 iPhone 远程鼠标控制器应用程序:iPhone 应用程序将坐标值发送到 Mac,然后 Mac 处理鼠标位置值。
为了获取 Mac 上的当前鼠标位置,接收者调用 [NSEvent mouseLocation]。
x 的值始终正确,但 y 的值错误。
我使用了“while”循环来处理这个事件。
while (1) {
mouseLoc = [NSEvent mouseLocation];
while ((msgLength = recv(clientSocket, buffer, sizeof(buffer), 0)) != 0) {
CGPoint temp;
temp.x = mouseLoc.x;
temp.y = mouseLoc.y; // wrong value
........
Run Code Online (Sandbox Code Playgroud)
每个循环周期的y值不同。例如,第一次循环时y值为400,下一次循环时y值为500;然后 y 在下一个循环中再次变为 400。
鼠标指针不断地上下移动,两个不同的y值之和始终为900。(我认为是因为屏幕分辨率是1440 * 900。)
我不知道为什么会发生这种情况,该怎么办以及如何调试。
我搜索一个解决方案,用mac上的cocoa做文件图标叠加(图标标记)(就像Dropbox在Mac上做的那样).有谁知道这样做的方法?我已经搜索了Xcode文档,我查看scpplugins源代码,这是一种旧的碳代码.
谢谢你的帮助
如何在 MacOSX“获取信息”屏幕的关键字字段中填写一些文本?例如,联系人应用程序有关键字“通讯录”——如何从 XCode 中做到这一点?

我正在构建 MacOS 应用程序。当我按下添加按钮时,我正在尝试制作更新单元格的表格视图。
以下是我的代码:
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let identifier = tableColumn?.identifier as NSString?
if ( identifier == "NameCell")
{
var result: NSTableCellView
let cell = tableView.make(withIdentifier: "NameCell", owner: self) as! NSTableCellView
cell.textField?.stringValue = self.data[row].setting!
return cell
}
else if (identifier == "SettingCell")
{
if let cell = tableView.make(withIdentifier: "SettingCell", owner: self) as? NSTableCellView {
cell.textField?.stringValue = self.data[row].setting!
return cell
}
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
但是,行 let cell = tableView.make(withIdentifier: "NameCell", owner: …
我想用Qt在mac应用程序上设置徽章(通知号码),
我也尝试QApplication :: setWindowIcon(),但它只更改窗口和对话框上的图标,而不是Dock上的图标.无论如何使用Qt设置徽章?我可以从Qt调用可可方法来设置徽章吗?
谢谢
如何创建 UnsafePointer?尝试让 mediaBoxPtr = UnsafePointer(mediaBox) 但失败
func PDFImageData(filter: QuartzFilter?) -> NSData? {
let pdfData = NSMutableData()
let consumer = CGDataConsumerCreateWithCFData(pdfData);
var mediaBox = CGRect(x: 0, y: 0, width: bounds.size.width, height: bounds.size.height)
let mediaBoxPtr : UnsafePointer<CGRect> = nil //???? I need CGRect(x:0, y:0, bounds.size.width, bounds.size.height)
if let pdfContext = CGPDFContextCreate(consumer, mediaBoxPtr, nil) {
filter?.applyToContext(pdfContext)}
Run Code Online (Sandbox Code Playgroud) 我想同时支持 10.13 和 10.14,但我想在 10.14 上支持快速数学。我只能在强制的情况下编译项目#define __CIKERNEL_METAL_VERSION__ 200,但这意味着在 10.13 上它会崩溃。如何配置项目以创建 2 个金属库?到目前为止,结果文件是default.metallib(使用Xcode编译)
BOOL supportsMetal;
#if TARGET_OS_IOS
supportsMetal = MTLCreateSystemDefaultDevice() != nil; //this forces GPU on macbook to switch immediatelly
#else
supportsMetal = [MTLCopyAllDevices() count] >= 1;
#endif
if (@available(macOS 10.13, *)) {
//only 10.14 fully supports metal with fast math, however there are hackintoshes etc...
if (supportsMetal) {
_kernel = [self metalKernel];
} else {
_kernel = [self GLSLKernel];
}
} else {
_kernel = [self GLSLKernel];
} …Run Code Online (Sandbox Code Playgroud) macos ×6
cocoa ×5
objective-c ×3
ios ×2
nsdocktile ×2
autocomplete ×1
badge ×1
cgrect ×1
dock ×1
finder ×1
keyword ×1
metal ×1
nsevent ×1
nsmenu ×1
nstableview ×1
nstextfield ×1
qt ×1
swift ×1
swift3 ×1
xcode ×1