编辑我的nib用于基于文档的Cocoa应用程序,我看到当我选择了一个窗口或面板时,Xcode让我设置它的"初始位置":

这与窗口的框架分开,它在它上面,那么这是什么?
什么使用"初始位置",两个弹出菜单及其可能的值是什么意思?
当我运行我的应用程序并且我的文档为这个笔尖创建NSWindowController(两个中的第二个)时,窗口显示为从主文档窗口级联,而不是在初始位置.这是因为我的应用程序是基于文档的(即,"初始位置"将由不属于文档的窗口使用),还是有其他原因?
这个问题是链接的扩展(链接中
的问题主要是目标,将NSPopupbutton绑定到NSArrayController)
我有一个Person有类属性NSString *name和NSImage *avatar
我都必须表现弹出按钮人员的所有名称作为下面的图片中看到的.

但是现在,随着要求的变化,我也需要展示人的化身.
如何使用Cocoa绑定将人的头像绑定到NSPopup按钮,使其看起来像上面图像中的michael(最后一个菜单选项)
注意:Michael已使用以下代码暂时添加进行演示:
person.title = @"Michael";
person.image = [NSImage imageNamed:@"avatar.png"];
[_popupButton.menu addItem:person];
Run Code Online (Sandbox Code Playgroud) 我在OSX 10.10上使用XCode 6.1.1
我有一个以下的可可窗口

我无法仅使用IB制作垂直自上而下的滑块.(B视图中的第二个滑块)
如示例中所示
我也试过使用setFrameCenterRotation,它解决了目的,但自动分析搞砸了.(如图C所示)
这似乎是一个XCode错误.
那么如何仅使用IB制作自上而下的滑块呢?
在 macOS 系统控制台上,启动我的应用程序之一时会记录此错误:
APP[28193]:dynamic_cast 错误 2:以下一个或多个 type_info 具有隐藏可见性。他们都应该具有公众知名度。17CPP 类名,28CPP 类名B。
据我所知,它还没有影响功能,但显然有些问题。检查Clang源中此警告的来源也表明它会对性能产生影响。
这是为一个框架生成的,其中包括我的应用程序中引用它的其他框架使用的 C++ 类。
FWIW,该警告是由Clangprivate_typeinfo.cpp中的类引起的(https://github.com/llvm-mirror/libcxxabi/blob/master/src/private_typeinfo.cpp)。
根据Apple 的C++ 运行时环境编程指南中的“控制符号可见性”一章,我应该能够使用属性或 GCC 编译指示在类级别上控制可见性。
事情是,据我所知,符号已经可见,nm并且我的框架都已经具有Default可见性(即NOT Hidden)。
另外,使用(属性或编译指示)强制默认可见性会导致应用程序在之前仅创建警告的地方崩溃。
奇怪的是,此警告仅针对某些类生成,而同一编译单元/框架中的大多数其他类不会引起任何警告。
任何有关如何解决此问题的进一步提示或想法都非常感谢!
有没有人NSTableView开始使用 SwiftUI?每当我运行我的代码时,我的应用程序都不会加载,但也没有错误。没有表视图的任何示例,但我认为它会使用NSViewControllerRepresentable. 我不完全确定您如何设计表格并将其添加到视图中。感谢您的帮助!
struct SampleViewController: NSViewControllerRepresentable {
var tableView:NSTableView = {
let table = NSTableView(frame: .zero)
table.rowSizeStyle = .large
table.backgroundColor = .clear
return table
}()
func makeNSViewController(context: Context) -> NSViewController {
return NSViewController()
}
func updateNSViewController(_ nsViewController: NSViewController, context: Context) {
//tbd
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, NSTableViewDataSource, NSTableViewDelegate {
var parent: SampleViewController
init(_ tvController: SampleViewController) {
self.parent = tvController
}
func numberOfRows(in tableView: NSTableView) -> Int {
return 10 …Run Code Online (Sandbox Code Playgroud) 我有一个带有 a 的 macOS 应用程序,NavigationView并希望在窗口的工具栏中拥有默认的 ToggleSidebar 项。
目前我将 ToolbarItem 的目标设置toolbarWillAddItem(_)为NSToolbarDelegate.
在我实现的 AppDelegate 内部
@objc func toggleSidebar(_ sender: Any) {
((window.contentView?.subviews.first?.subviews.first?.subviews.first as? NSSplitView)?.delegate as? NSSplitViewController)?.toggleSidebar(self)
}
Run Code Online (Sandbox Code Playgroud)
此解决方案现在正在运行。如果 SwiftUI 的实现将改变这一点。
那么如何才能以更好的方式做到这一点呢?
我正在为 macOS 制作一个 SwiftUI 应用程序,我想通过检测用户手指的位置将触控板用作 (x, y) 输入。我想能够检测到的多个手指搁在触控板上(不拖移)。我怎么做?
以前有人问过类似的问题,但我再次问,因为那是近 10 年前的问题,答案都在 Obj-C 中(Swift 3 中的一个),我想知道是否有更新的方法。最重要的是,我不知道如何将 Obj-C 代码实现到我的 SwiftUI 应用程序中,所以如果没有任何更新的方法,如果有人能解释如何实现旧的 Obj-C 代码,我将不胜感激。
为了说明我的意思,AudioSwift 应用程序的这个视频演示正是我想要的。macOS 本身也用这个来手写中文(虽然我不需要识别字符)。
我一直在尝试创建一种方法来告诉我的(正在运行的)macOS 应用程序打开一些文件并为命令提供一些额外的参数。
对于冷启动应用程序,使用
$ open MyApp.app fileA.txt --args --foo-arg
Run Code Online (Sandbox Code Playgroud)
将启动应用程序,我将能够检查--foo-arg通过UserDefaults/ CommandLine/ ProcessInfo。但是,如果应用程序已经在运行,--foo-arg则UserDefaults/ ProcessInfo?/ 中缺少CommandLine。
我一直在努力解决这里的解决方案,因为我有一些要求使事情变得更加困难。
XPC
有些人建议我使用 XPC,但在阅读它之后,我不确定该解决方案的外观如何?
苹果脚本
网址方案
我可以注册我的应用程序以拥有自己的 URL 方案,但 NSApplicationDelegate 处理传入 URL 的方式分为两批。首先是它可以打开的 URL,然后是它无法打开的 URL 方案或文件路径。IE:
open -a MyApp.app myapp:foo; open -a MyApp.app file.txt
Run Code Online (Sandbox Code Playgroud)
我可能可以完成这项工作,但它有点俗气,我真的很想以正确的方式做到这一点。
在 Big Sur 中,Xcode 和 Calendar 的工具栏项目在打开时保留在侧边栏上,但在侧边栏折叠时在左侧仍然可见。
在13:55 的“采用 macOS 的新外观”中,John 说“放置在分隔符 [sidebarTrackingSeparator] 之前的项目将出现在全高侧边栏上”,就像它们在 Xcode 和日历中一样。我一直无法完成这项工作。
这是一个演示该问题的示例项目。我使用了 IB 定义的“带有侧边栏的窗口控制器”,并添加了一个用于切换侧边栏的工具栏项。在 NSWindowController 的子类中,我.sidebarTrackingSeparator在.toggleSidebar项目后插入:
override func windowDidLoad() {
// Sometimes the toolbar items aren't loaded yet--async is a quick and dirty way to prevent a crash
DispatchQueue.main.async {
self.window?.toolbar?.insertItem(withItemIdentifier: .sidebarTrackingSeparator, at: 1)
}
}
Run Code Online (Sandbox Code Playgroud)
有时这不起作用(切换按钮保留在侧边栏的右侧)。有时侧边栏切换会放在溢出菜单中:
在 WWDC 会议之外,我还没有看到任何关于实现此工具栏设计的讨论。有没有人能够让这个工作?
我正在尝试在文本框中处理换行符的shift+enter(聊天应用程序例如WhatsApp、Discord 等实现)。目前,我正在使用 SwiftUI TextEditor,但它没有任何方法可以像在 AppKit 中那样处理原始键盘事件。因此,一个黑客解决方案是检查消息的最后一个字符是否是 .onchange 中的换行符,然后发送消息。这种方法适用于“输入发送”,但我找不到在按下 Shift 键时不发送消息的方法(对于多行消息)。
我正在尝试一种使用NSViewRepresentableAppKit API 的方法,如下所示:
struct KeyEventHandling: NSViewRepresentable {
class KeyView: NSView {
override var acceptsFirstResponder: Bool { true }
override func keyDown(with event: NSEvent) {
print("keydown event")
}
override func flagsChanged(with event: NSEvent) {
switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
case [.shift]:
print("shift key pressed")
default:
print("no modifier keys are pressed")
}
}
}
func makeNSView(context: Context) -> NSView {
let view = KeyView()
DispatchQueue.main.async { // wait till next event …Run Code Online (Sandbox Code Playgroud)