标签: appkit

在 SwiftUI Mac 应用程序中圆化特定角

我一直在尝试弄清楚如何在Mac 应用程序中圆化SwiftUI 的特定角。我能找到的所有解决方案(例如这个)仅适用于 iOS,因为它具有. 我找不到同等的东西。ViewUIRectCornerNSRectCorner

以前,我会NSView像这样绕过一个特定的角:

layer?.cornerRadius = 5
layer?.maskedCorners = .layerMinXMinYCorner //Bottom-left corner
Run Code Online (Sandbox Code Playgroud)

有没有人找到一种方法可以在 SwiftUI 中的 Mac 应用程序中圆化特定的角?

macos appkit swiftui

2
推荐指数
1
解决办法
2661
查看次数

macOS 应用程序在 Sonoma (macOS 14) 上损坏了 UI,但仅限于使用 Xcode 15 构建时

当我使用 Xcode 15 构建 UI 应用程序并在 macOS 14 (Sonoma) 上运行该应用程序时,多个视图中的 UI 大部分缺失。在 macOS 14 之前的任何系统上运行相同的构建时,UI 看起来都很好。使用 Xcode 14.3.1 构建并在 macOS 14 上运行应用程序时,UI 看起来也很好。只是 Xcode 15 和 macOS 14 的组合导致了这种情况问题。

作为一种解决方法,我继续使用 Xcode 14.3.1 构建应用程序,即使我使用的是 Sonoma 并且 Xcode 14.3.1 甚至不支持 Sonoma,但使用这个技巧我还是能够让它工作。这暂时解决了问题,但并不是真正的长期解决方案,因为在未来的某个时候,升级到更新的 Xcode 版本将不可避免。

macos user-interface xcode appkit macos-sonoma

2
推荐指数
1
解决办法
725
查看次数

更新NSDocument状态而不撤消?

我有一个基于文档的应用程序,但我没有使用撤消.如何将窗口状态更改为"脏"且某些时间?

谢谢.

cocoa objective-c nsdocument appkit

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

学习掌握AppKit框架的最佳方法

我目前一直在学习Objective-C和Cocoa,但我觉得我需要了解更多有关AppKit框架的知识.我经常怀疑我应该将哪些组件用于特定用途.例如,我花了很多时间研究如何简单地在两个NSView之间切换(与NSTabView相同,但没有它的标签,例如在IBAction中).

我已经阅读了Aaron Hillegass 为Mac OS X编写的Cocoa Programming,但我正在寻找接下来要阅读/做的内容,以扩展我对AppKit框架的知识以及使用Cocoa开发用户界面.你建议我看一下什么?

先感谢您.

cocoa objective-c appkit

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

Mac OS风格的TabView

我刚刚开始为Mac OS X编写代码,我对标签控件非常兴奋,就像这样:

在此输入图像描述

但我无法理解如何实现它.是否有标准的UIKit控件或一些外部控件,或者这只是一组按钮?

macos cocoa appkit

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

NSScrollView中的NSImageView切片在缩小时绘制不需要的边框

我有一个NSScrollView,其documentView是一个巨大的NSView,由许多子NSImageViews组成,他们在地图中充当瓷砖.(整个地图是NSView,因为它比屏幕大小大,所以它嵌入在滚动视图中).

我能够使用正确的平铺位置显示地图,并使用条形/手势滚动.但是..当我启用放大倍率才能进行缩放时,会发生以下情况:在此输入图像描述 不知怎的,我假设自动布局添加下面的瓷砖边框,我不知道如何禁用它们.这些肯定是边界,因为我已经检查了数千次我的瓷砖和子视图大小相同..所以它来自哪里?我对iOS开发有很多经验,但是我完全迷失了NSScrollView(我的委托方法在哪里?).如何禁用滚动视图的此行为?

这是我的子视图代码:

- (void)setupSubViews
{
  NSLog(@"--------Creating subviews!-------");
    //first we create the subviews..
    //This is the key part, we traverse from top Left, and since OS X coordinates start at bottom left, we need to invert the rows!
    for (int i=0; i< NUMBER_OF_COLUMNS; i++) {
        for (int j=NUMBER_OF_ROWS-1; j>=0; j--) {
            CGRect frame = CGRectMake(i*256, j*256, 256, 256);
            NSImageView *newView = [[NSImageView alloc] initWithFrame:frame];
            newView.focusRingType = NSFocusRingTypeNone; //I gave this focusRing a try, it didn't work :(

            [self addSubview:newView]; …
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c appkit nsscrollview

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

当[委托]不再被引用时,在`[NSApp run]`中崩溃

这是代码:

@interface AppDelegate : NSObject <NSApplicationDelegate>

@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    printf("My app delegate: finish launching\n");
}

@end

int main(int argc, char *argv[])
{
    @autoreleasepool
    {

        [NSApplication sharedApplication];
        [NSApp setDelegate:[[AppDelegate alloc] init]];
        [NSApp run];
    }
}
Run Code Online (Sandbox Code Playgroud)

它崩溃[NSApp run]但我真的没有看到我错过了什么.如果我在[NSApp finishLaunching]之前添加了一个run,它会在那里崩溃.

如果我没有设置委托,它不会崩溃.

如果我之前引用了委托,它可以正常工作:

AppDelegate* appDelegate = [[AppDelegate alloc] init];
[NSApp setDelegate:appDelegate];
Run Code Online (Sandbox Code Playgroud)

所以我想它会因为ARC而在第一个版本中立即释放委托,因为委托可能只是一个弱引用,对吧?但是你应该怎么做相同的代码呢?

cocoa objective-c appkit

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

如何动画NSCollectionView的scrollToIndexPaths:scrollPosition:?

我正在尝试动画NSCollectionView scrollToIndexPaths:scrollPosition:,如果将此消息发送到集合视图的animator代理,根据文档可以实现.但是,我无法让它发挥作用.

我已经设置了一个非常简单的项目,其中只包含一个集合视图,并创建了1000个100x100项目.一个简单的操作将可见索引路径增加50并尝试滚动到它.我的滚动代码如下:

- (IBAction)increment:(id)sender {
  NSIndexPath *visibleIndexPath = [[self.collectionView indexPathsForVisibleItems] anyObject];
  NSIndexPath *toIndexPath = [NSIndexPath indexPathForItem:visibleIndexPath.item + 50 inSection:visibleIndexPath.section];
  [self.collectionView.animator scrollToItemsAtIndexPaths:[NSSet setWithObject:toIndexPath] scrollPosition:NSCollectionViewScrollPositionCenteredHorizontally];
}
Run Code Online (Sandbox Code Playgroud)

这会将集合视图跳转到目标索引路径,但不会设置动画.我已经确保滚动视图也是图层支持的,基于我在此发现的一些其他线程:

在此输入图像描述

项目中唯一的其他代码是几行,用于设置集合视图和流程布局viewDidLoad::

  // Do any additional setup after loading the view.
  NSCollectionViewFlowLayout *flowLayout = [[NSCollectionViewFlowLayout alloc] init];
  flowLayout.itemSize = CGSizeMake(100.f, 100.f);
  flowLayout.scrollDirection = NSCollectionViewScrollDirectionHorizontal;
  self.collectionView.collectionViewLayout = flowLayout;

  [self.collectionView registerClass:[CollectionViewItem class] forItemWithIdentifier:@"identifier"];
Run Code Online (Sandbox Code Playgroud)

有没有人能够使用动画scrollToIndexPaths:scrollPosition:?文档使它听起来很明显,但我不能让它工作.

macos cocoa objective-c appkit nscollectionview

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

以编程方式创建的NSCollectionView`makeItem`即使注册也返回nil

我正在开发针对macOS 10.10 SDK的macOS应用程序,并使用Xcode 9.3(Swift 4)。我没有使用xibs,而是以编程方式创建了所有视图。

我想创建一个NSCollectionView。我注册的子类,NSCollectionViewItem然后NSCollectionView通过调用将该类注册到collectionView.register(:,forItemWithIdentifier)。稍后,在数据源中,我致电collectionView.makeItem(withIdentifier:,for:)

但是,该makeItem方法始终返回nil。我究竟做错了什么?

我发现了一个类似的问题,但解决方案是致电register,我已经这样做了。

供参考,这是重现我的问题的最低工作量:当我在调用之后放置一个断点时makeItem,我可以看到返回的值始终是nil

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!


    func applicationDidFinishLaunching(_ aNotification: Notification) {
        window.contentViewController = TestViewController()
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        // Insert code here to tear down your application
    }


}

let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "testIdentifier")

class TestViewController: NSViewController, NSCollectionViewDataSource {

    override func loadView() …
Run Code Online (Sandbox Code Playgroud)

macos cocoa appkit nscollectionview swift

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

如何使用SwiftUI构建AppKit表视图?

我们有很多针对iOS的教程,其代码如下:

List(items) { item in
  NavigationLink(destination: ItemView(item: item)) {
    ItemRow(item: item)
  }
}
Run Code Online (Sandbox Code Playgroud)

On macOS however, this code results in a list of disabled table cell views.

So how do we build something like NSTableView using SwiftUI?

macos nstableview appkit swiftui

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