我一直无法找到 的有效值NSFont.TextStyleOptionKey。
更具体地说,我想使用NSFont.preferredFont(forTextStyle:options:)动态(动态点大小)类型,但我想更改字体的粗细。
我试图弄清楚如何使用 NSTextList 但除了这个 SO 问题和此博客中的评论之外,在网上几乎找不到有用的信息。
使用这个我已经能够创建一个粗略的例子来弄清楚:
let textView = NSTextView()
//Create NSTextList
let list = NSTextList(markerFormat: .decimal, options: 0)
list.startingItemNumber = 1
//Create NSParagraphStyle with text list
let paragraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle
paragraphStyle.textLists = [list]
let attributes = [NSAttributedString.Key.paragraphStyle : paragraphStyle]
//Add attributes to list block
let nsmutableAttributedString = NSMutableAttributedString(string: "\t\(list.marker(forItemNumber: 1))\tList Item 1 ", attributes: attributes)
textView.textStorage?.setAttributedString(nsmutableAttributedString)
return textView
Run Code Online (Sandbox Code Playgroud)
这效果很好,当应用程序运行时,按下enter会创建一个新的格式正确的行,按下tab会正确缩进列表项。
一切都很好...但是,标记周围的间距似乎不正确,并且不能反映您在 TextEdit 中获得的内容。
这是我的文本视图,请注意标记周围较大的间距,在执行下面突出显示的过程后,将恢复为“默认”文本编辑间距...
我希望从中得到三件事:
\t …我正在尝试使用全局键盘快捷键以编程方式在 macOS 上的 Swift 中打开 MenuBarExtra。我已经设置了键盘快捷键的所有代码,但我不知道如何使用 SwiftUI 显示/隐藏 MenuBarExtra。在本机 SwiftUI 中是否有一种我似乎找不到的方法?否则,有没有办法通过 AppKit 做到这一点?
我通过以下方式定义了我的菜单栏应用程序:
MenuBarExtra("Title", image: "sample_icon", content: {
ContentView()
.preferredColorScheme(.dark)
})
Run Code Online (Sandbox Code Playgroud) 我想要一个带有 fullSizeContentView 的 NSWindow 来获取具有内在内容大小的 SwiftUI 视图的确切大小。我看到过类似的帖子,但它们的不同之处在于,在顶层提供一个固定框架就可以了。我不想这样做,我希望窗口大小与视图的大小完全相同。我怎样才能做到这一点?
\n这是在 Xcode 14.1 中运行的 Playground 代码片段。
\nimport AppKit\nimport SwiftUI\n\nclass MyWindow: NSWindow {\n override func setFrame(_ frameRect: NSRect, display flag: Bool) {\n print("\\(Date().timeIntervalSince1970) setFrame called \\(frameRect)")\n super.setFrame(frameRect, display: flag)\n }\n}\n\nlet window = MyWindow()\n\nwindow.styleMask = [\n .titled,\n .closable,\n .resizable,\n .fullSizeContentView\n]\n\nwindow.toolbar = nil\n\nwindow.titlebarAppearsTransparent = true\nwindow.titleVisibility = .hidden\nwindow.isMovable = true\nwindow.isMovableByWindowBackground = true\nwindow.standardWindowButton(.closeButton)?.isHidden = false\nwindow.standardWindowButton(.miniaturizeButton)?.isHidden = true\nwindow.standardWindowButton(.zoomButton)?.isHidden = true\n\nprint("\\(Date().timeIntervalSince1970) Before content \\(window.frame)")\nwindow.contentView = NSHostingView(rootView: ContentView())\nprint("\\(Date().timeIntervalSince1970) After setting content \\(window.frame)")\n\nwindow.makeKeyAndOrderFront(nil)\n\nprint("\\(Date().timeIntervalSince1970) After makeKeyAndOrderFront \\(window.frame)")\n\nDispatchQueue.main.asyncAfter(deadline: .now() + …Run Code Online (Sandbox Code Playgroud) 当用户按下全局快捷方式时,我试图获取选定的文本。无论当前聚焦的应用程序是 chrome、safari 还是 Microsoft Word,我的应用程序都应该读取当前选择的文本。
我正在尝试使用 AppleScript 来执行此操作,该脚本使用剪贴板进行黑客攻击。但这并不适用于所有应用程序。
func readSelectedText() {
let script = """
-- Back up clipboard contents:
set savedClipboard to the clipboard
-- Copy selected text to clipboard:
tell application "System Events" to keystroke "c" using {command down}
delay 1 -- Without this, the clipboard may have stale data.
set theSelectedText to the clipboard
delay 1 -- Without this delay, may restore clipboard before pasting.
-- Restore clipboard:
set the clipboard to savedClipboard
return theSelectedText
"""
var …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 NSTextView 从一个 NSView 拖动到另一个 NSView。我收到了正确的事件,但拖动动画没有出现。
子类化 TextView:
class MyTextView:NSTextView, NSPasteboardItemDataProvider
{
func pasteboard(_ pasteboard: NSPasteboard?, item: NSPasteboardItem, provideDataForType type: NSPasteboard.PasteboardType)
{
NSLog ("Paste")
}
override func mouseDown(with theEvent: NSEvent)
{
let pasteboardItem = NSPasteboardItem()
pasteboardItem.setDataProvider(self, forTypes: [.string])
let draggingItem = NSDraggingItem(pasteboardWriter: pasteboardItem)
draggingItem.setDraggingFrame(self.bounds, contents:.Publisher)
beginDraggingSession(with: [draggingItem], event: theEvent, source: self)
}
override func draggingUpdated(_ sender: NSDraggingInfo) -> NSDragOperation
{
return NSDragOperation.copy
}
}
Run Code Online (Sandbox Code Playgroud)
子类化 NSView 以接收放置事件:
class DropView:NSView
{
func EnableDrop ()
{
// Registering for drag drop types …Run Code Online (Sandbox Code Playgroud) 最近的 Apple 产品的键盘上有 Globe (\xef\xb8\x8e) 键。在 AppKit 级别,它实际上只是一个 Fn 键,其行为与NSEvent.ModifierFlags.function. 但是有什么方法可以知道用户当前使用的键盘是有 Globe 键还是只有 Fn 键呢?
似乎系统以某种方式知道它,因为菜单中的快捷键显示根据键盘而变化。仅当键盘实际有 Globe 键时才会显示 Globe 符号。否则,显示“fn”。
\n\n但是,到目前为止,我还没有找到一种在 AppKit/SwiftUI 世界中以编程方式检测它的方法。我想在我自己的视图中实现显示这些菜单命令的键盘快捷键。
\n我挖掘了文档,但没有找到怎么做.如何为IKImageBrowserView中的每个项添加工具提示?
我的项目中有两个笔尖.我一直在挖掘互联网,以弄清楚如何关闭按钮或隐藏按钮所在的笔尖并打开另一个按钮.另一个笔尖会有一个按钮,它可以做同样的事情但反之亦然.
我不知道从哪里开始这个.如果有人可以为此制作一个示例类和方法,我可能会有一些工作.
我有一个基于视图的NSTableView,它接受从finder中删除的图像.我希望能够在指定的放置位置插入新图像(左下方示例)并防止行本身掉落(下面的右侧示例).
我看了一个委托方法和NSTableView属性和方法,但看不到防止drop-on-rows的方法.有任何想法吗?
图:光标尚未在屏幕截图中呈现.在左侧示例中,我拖动一个名为Pic_3.png的文件,NSTableView通过在插入新图像的位置绘制一条线来响应.在右边的示例中,我继续拖动并将其放置在表视图中的现有行上.我没有任何意义,插入在现有的项目,所以我想阻止这种行为.
appkit ×10
swift ×7
macos ×5
cocoa ×4
swiftui ×3
nstextview ×2
nswindow ×2
applescript ×1
imagekit ×1
nsfont ×1
nstableview ×1
nsview ×1