标签: appkit

NSFont.TextStyleOptionKey 中可以使用哪些值

我一直无法找到 的有效值NSFont.TextStyleOptionKey

更具体地说,我想使用NSFont.preferredFont(forTextStyle:options:)动态(动态点大小)类型,但我想更改字体的粗细。

macos appkit nsfont swift dynamic-type-feature

5
推荐指数
0
解决办法
426
查看次数

NSTextList 格式化

我试图弄清楚如何使用 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 中获得的内容。

这是文本编辑,注意标记周围的间距 展示一个

这是我的文本视图,请注意标记周围较大的间距,在执行下面突出显示的过程后,将恢复为“默认”文本编辑间距...

在此输入图像描述

我希望从中得到三件事:

  1. 我在某种程度上做错了吗?我很确定我必须\t …

macos nstextview appkit swift

5
推荐指数
1
解决办法
873
查看次数

如何在 Swiftui 中以编程方式显示菜单栏窗口?

我正在尝试使用全局键盘快捷键以编程方式在 macOS 上的 Swift 中打开 MenuBarExtra。我已经设置了键盘快捷键的所有代码,但我不知道如何使用 SwiftUI 显示/隐藏 MenuBarExtra。在本机 SwiftUI 中是否有一种我似乎找不到的方法?否则,有没有办法通过 AppKit 做到这一点?

我通过以下方式定义了我的菜单栏应用程序:

MenuBarExtra("Title", image: "sample_icon", content: {
      ContentView()
         .preferredColorScheme(.dark)
})
Run Code Online (Sandbox Code Playgroud)

appkit swift swiftui

5
推荐指数
1
解决办法
498
查看次数

有一个 fullSizeContentView NSWindow 采用 SwiftUI 视图的大小

我想要一个带有 fullSizeContentView 的 NSWindow 来获取具有内在内容大小的 SwiftUI 视图的确切大小。我看到过类似的帖子但它们的不同之处在于,在顶层提供一个固定框架就可以了。我不想这样做,我希望窗口大小与视图的大小完全相同。我怎样才能做到这一点?

\n

这是在 Xcode 14.1 中运行的 Playground 代码片段。

\n
import 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)

appkit nswindow swiftui

5
推荐指数
1
解决办法
473
查看次数

在 macOS 上的任何应用程序中获取选定的文本

当用户按下全局快捷方式时,我试图获取选定的文本。无论当前聚焦的应用程序是 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)

macos applescript appkit swift

5
推荐指数
1
解决办法
1271
查看次数

MacOS/Appkit:无法看到 NSTextView 的拖动动画

我正在尝试将 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)

macos nsview nstextview appkit swift

5
推荐指数
0
解决办法
45
查看次数

检测键盘是否有 macOS 上的 Globe 键

最近的 Apple 产品的键盘上有 Globe (\xef\xb8\x8e) 键。在 AppKit 级别,它实际上只是一个 Fn 键,其行为与NSEvent.ModifierFlags.function. 但是有什么方法可以知道用户当前使用的键盘是有 Globe 键还是只有 Fn 键呢?

\n

似乎系统以某种方式知道它,因为菜单中的快捷键显示根据键盘而变化。仅当键盘实际有 Globe 键时才会显示 Globe 符号。否则,显示“fn”。

\n

带有地球符号的菜单屏幕截图\n带有 fn 符号的菜单屏幕截图

\n

但是,到目前为止,我还没有找到一种在 AppKit/SwiftUI 世界中以编程方式检测它的方法。我想在我自己的视图中实现显示这些菜单命令的键盘快捷键。

\n

macos cocoa appkit swift swiftui

5
推荐指数
1
解决办法
233
查看次数

IKImageBrowserView:如何显示每个项目的工具提示?

我挖掘了文档,但没有找到怎么做.如何为IKImageBrowserView中的每个项添加工具提示?

cocoa appkit imagekit ikimagebrowserview

4
推荐指数
1
解决办法
836
查看次数

以可编程方式以编程方式打开和关闭窗口

我的项目中有两个笔尖.我一直在挖掘互联网,以弄清楚如何关闭按钮或隐藏按钮所在的笔尖并打开另一个按钮.另一个笔尖会有一个按钮,它可以做同样的事情但反之亦然.

我不知道从哪里开始这个.如果有人可以为此制作一个示例类和方法,我可能会有一些工作.

cocoa appkit nswindow

4
推荐指数
1
解决办法
4181
查看次数

如何在NSTableView中只允许*之间的*行?

我有一个基于视图的NSTableView,它接受从finder中删除的图像.我希望能够在指定的放置位置插入新图像(左下方示例)并防止行本身掉落(下面的右侧示例).

我看了一个委托方法和NSTableView属性和方法,但看不到防止drop-on-rows的方法.有任何想法吗?

屏幕截图显示了行间(左)和行上行(右)行为.

:光标尚未在屏幕截图中呈现.在左侧示例中,我拖动一个名为Pic_3.png的文件,NSTableView通过在插入新图像的位置绘制一条线来响应.在右边的示例中,我继续拖动并将其放置在表视图中的现有行上.我没有任何意义,插入现有的项目,所以我想阻止这种行为.

cocoa nstableview appkit swift

4
推荐指数
1
解决办法
487
查看次数