标签: appkit

更好地为Cocoa绘制代码?

有什么建议的"路径"可以更好地在Cocoa中绘制代码?我想在这一点上,这是我最大的弱点.在代码中绘制一般的东西,还是Cocoa特有的?

谢谢! - 杰森

iphone cocoa objective-c uikit appkit

6
推荐指数
1
解决办法
561
查看次数

以编程方式取消选择NSTextView中的文本?

我正在使用以下代码取消选择NSTextView,如此处所示.不幸的是,什么也没发生.我已经尝试了我所知道的调试它,但一切似乎都正常工作,但它不会影响NSTextView.

代码:

// Sets the scrolling bounds and behavior. This might be useful, but I don't know
[[textView textContainer] setContainerSize:NSMakeSize(FLT_MAX, FLT_MAX)];
[[textView textContainer] setWidthTracksTextView:FALSE];

// The code for deselecting, beginning by making sure it is actually selected (for testing only, as strange as it is)

[textView setSelectable:TRUE];
[textView setDelegate:self];
[_window makeFirstResponder:textView];

NSText *fieldEditor = [_window fieldEditor:TRUE forObject:textView];
[fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string] length],0)];
[fieldEditor setNeedsDisplay:YES];
Run Code Online (Sandbox Code Playgroud)

关于为什么这不起作用的任何想法?我确信我的插座设置正确,因为我可以操纵其他东西,比如它的字符串值.

cocoa nstextview appkit

6
推荐指数
3
解决办法
4038
查看次数

显示菜单的披露按钮

请给我一个建议如何在我的屏幕截图中实现这种披露按钮 - 显示"点击下拉"按钮显示点击菜单:

我想要什么

我尝试了两种方法,使用NSPopupButtonNSButton使用披露样式和手动菜单显示:

  • NSPopupButton 继续显示默认值文本,无法在Interface Builder中调整为较小的大小.

    NSPopupButton

  • NSButton显示一个菜单,但显然错位到我点击按钮的位置,而不是在底部边缘.我正在使用以下代码:

    - (IBAction)handleShowMenu:(id)sender
    {
        [NSMenu popUpContextMenu:profileMenu
                       withEvent:[NSApp currentEvent]
                         forView:sender];
    }
    
    Run Code Online (Sandbox Code Playgroud)

    NSButton带菜单

那么显示这样一个菜单的正确方法是什么?

macos objective-c nsmenu appkit nsbutton

6
推荐指数
1
解决办法
2637
查看次数

NSCollectionViewItem视图的子视图始终为零

我有一个非常基本的设置NSCollectionView.我有一个子类NSCollectionViewItem,用作itemPrototype集合视图.集合视图项具有视图.

使用Interface Builder,我NSImageView在集合视图项的视图中添加了一个并连接IBOutlet到我的集合视图项子类的实例.对于该物业IBOutlet是用来retain为它的内存管理.

我的目标是每当集合视图项的选择状态发生更改时隐藏或显示此图像视图.但是在setSelected:方法中我的图像视图的属性是零,即使我100%确定它的插座已连接,其属性设置为保留,我没有取消设置或释放图像视图.

我对集合视图项有类似的问题,其中添加到视图的活动指示符也始终为零.为什么会发生这种情况,我需要做些什么来解决它?

cocoa appkit

6
推荐指数
1
解决办法
286
查看次数

更改NSTabViewController NSSegmentedControl

在10.10中,Apple通过Storyboard和一些课程介绍了AppKit的一些更新.其中之一是NSTabViewController.

在WWDC Session 212中,演示者展示了该类的一些属性. WWDC

据推测,NSSegmentedControl可以修改默认值,或者设置tabStyleNSTabViewControllerTabStyleUnspecified可以使我们修改选项卡样式.问题是segmentedControl似乎不是SDK上的可用属性.也许它没有让它发布?没有它我们怎样才能改变风格?我的目标是实现类似Xcode 6左侧选项卡的功能.

在此输入图像描述

xcode cocoa appkit wwdc

6
推荐指数
1
解决办法
1812
查看次数

使用 NSBeep() 不会发出哔哔声

我从来没有用过NSBeep。我已经导入AppKit.framework到项目中。在 Xcode 8.2 和 Swift 3 下,我有

import AppKit

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationWillFinishLaunching(_ notification: Notification) {
        NSBeep() 
    }
}
Run Code Online (Sandbox Code Playgroud)

而且没有哔哔声。我究竟做错了什么?谢谢。

macos cocoa appkit swift3

6
推荐指数
2
解决办法
1260
查看次数

如何检测NSView或其父NSWindow的活动外观?

当其父窗口处于活动状态或非活动状态时,所有本机控件的外观都不同。我们应该如何在自定义组件中检查此状态,例如在渲染按钮单元时?

我们可以检查和controlView.window的属性,但它们不能涵盖所有情况。例如,如果您在桌面上打开应用程序的一个窗口,而在全屏空间中打开另一个窗口,则根据公共API,其中只有一个可以是键或主键。但是,标准控件似乎使它们在两个空间中均处于活动状态:isMainWindowisKeyWindow

请注意,两个Safari窗口中的工具栏按钮如何呈现为活动状态。我们如何实现相同的行为?

cocoa nsview appkit nswindow nscell

6
推荐指数
1
解决办法
159
查看次数

Catalina中的NSButton没有处于选择状态

我在Catalina上使用以下代码将NSButton设置为复选框(Mojave很好):

let checkbox = NSButton(frame: NSRect(x: 0, y: 0, width: 200, height: 32))
checkbox.setButtonType(.switch)
checkbox.title = "Sustain"
checkbox.state = .off
self.view.addSubview(checkbox)
Run Code Online (Sandbox Code Playgroud)

加载应用程序时看起来不错

关

但是,一旦我检查了一下,我希望出现的刻度线就不存在了

上

如果我加载了可视层次结构调试器,就可以很好地看到它,我已经尝试将这段代码直接放到新的应用程序中并且可以工作,但是在我的应用程序中它是隐藏的,几乎就像是某些东西将其覆盖...任何帮助表示赞赏

它也发生在NSPopUpButtons ....无边框:-s

更新:2019年10月14日

如评论中所述,这似乎是Xcode 11错误,Xcode 10.3在Catalina上正确呈现了按钮。

更新:2019年10月10日

奇怪的是,创建一个子类并设置一个CIFilter会显示该复选框,您只需要对一个NSButton进行此操作,然后其余所有工作就可以了:-s

import AppKit

class Checkbox : NSButton {

init() {
  super.init(frame: .zero)
    addFilter()
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
    addFilter()
}

// add random cifilter
func addFilter() {
    let colorFilter = CIFilter(name: "CIFalseColor")!
    colorFilter.setDefaults()
    colorFilter.setValue(CIColor(cgColor: NSColor.black.cgColor), forKey: "inputColor0")
    colorFilter.setValue(CIColor(cgColor: NSColor.white.cgColor), forKey: "inputColor1")
    self.contentFilters = [colorFilter]
}


}
Run Code Online (Sandbox Code Playgroud)

对下拉菜单执行相同的操作,但是直到您单击它为止它是不可见的……开始感觉像是Catalina的错误

macos cocoa appkit nsbutton macos-catalina

6
推荐指数
0
解决办法
185
查看次数

如何打印 SwiftUI 视图

我想使用SwiftUI View 在 macOS (Ventura) 上打印标签之类的东西。但这会导致一张白纸:

func startPrinting() {
    let printView = NSHostingView(rootView: Text("I want to print"))
    printView.frame.size = CGSize(width: 200, height: 200)

    let printInfo = NSPrintInfo()
    printInfo.topMargin = 0
    printInfo.leftMargin = 0
    printInfo.bottomMargin = 0
    printInfo.rightMargin = 0

    let printOperation = NSPrintOperation(view: printView, printInfo: printInfo)
    printOperation.run()
}
Run Code Online (Sandbox Code Playgroud)

当我切换Text到时TextField,它被打印,但我不知道为什么。

如何打印SwiftUI视图?

macos appkit swift swiftui

6
推荐指数
1
解决办法
372
查看次数

如何使 NSStatusItem 占据菜单栏的整个高度?

我希望 macOS 菜单栏中有一个项目占据菜单栏的整个高度。例如,可以在 FaceTime 的 UI 中看到这一点:

在此输入图像描述

在我的尝试中,我只能让该项目从菜单栏的 y 边缘延伸到 1pt:

在此输入图像描述

(请注意,在带有凹口的菜单栏中,即使 FaceTime 也不会延伸到边缘,但它仍然比我的版本进一步延伸 1pt topbottom

我已经尝试过NSStatusItem button和 (不赞成)view来让事情正常工作。我也尝试过 SwiftUIMenuBarExtra

导致上面第二个屏幕截图的简单示例:

final class StatusItemManager: ObservableObject {
    var statusButtonItem: NSStatusItem?
    var statusViewItem: NSStatusItem?
    
    /// Note that this uses deprecated APIs -- I'd prefer to stay away from these if possible
    func showViewStatusItem() {
        statusViewItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
        
        guard let statusViewItem else { return }
        
        let iconView = NSHostingView(rootView: ItemView(title: "View"))
                
        statusViewItem.view = iconView …
Run Code Online (Sandbox Code Playgroud)

macos appkit nsstatusitem swift

6
推荐指数
0
解决办法
154
查看次数