标签: appkit

如何在Cocoa AppKit应用程序中实现缩放/缩放

如何在Cocoa AppKit应用程序中实现缩放/缩放(即不是最大化窗口而是缩放窗口及其所有子视图)?我认为它在iOS中称为zoomScale.它可以使用Core Animations或Quartz 2D(例如CGContextScaleCTM)完成,还是我被迫在我的所有NSView,NSCell等中手动实现它?

macos cocoa zoom appkit

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

"初始位置"在Xcode的nib编辑器中做了什么?

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

笔尖中的窗口,已选中以及

这与窗口的框架分开,它在它上面,那么这是什么?

什么使用"初始位置",两个弹出菜单及其可能的值是什么意思?

当我运行我的应用程序并且我的文档为这个笔尖创建NSWindowController(两个中的第二个)时,窗口显示为从主文档窗口级联,而不是在初始位置.这是因为我的应用程序是基于文档的(即,"初始位置"将由不属于文档的窗口使用),还是有其他原因?

xcode cocoa appkit nswindow xcode4

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

令牌文本字段,如Numbers

我想要一个文本字段,如Numbers中的表达式编辑器文本字段:

在此输入图像描述

它非常相似NSTokenField,但NSTokenField只支持分隔符分隔的标记列表,如Mail.app中的"To:"字段.

在此输入图像描述

我必须将这些令牌嵌入到特定位置的文本中,否则它们的工作方式完全相同NSTokenField(退格会删除令牌,您可以将它们拖动等等).

有没有第一方或第三方控制做这样的事情?我没找到任何东西.

如果没有,你会如何推荐实施它?使用核心文本并重新发明轮子(实现NSTextField更好的令牌支持)?或者有更好的解决方案吗?

cocoa objective-c nstextfield appkit nstokenfield

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

如何在使用自动布局时使用动画折叠NSSplitView窗格?

我已经尝试了我能想到的所有内容,包括我在SO和其他邮件列表中找到的所有建议,但我无法弄清楚如何NSSplitView在启用"自动布局"时以编程方式折叠带有动画的窗格.

这就是我现在所拥有的(用Swift编写的乐趣),但它有多种方式:

@IBAction func toggleSourceList(sender: AnyObject?) {
    let isOpen = !splitView.isSubviewCollapsed(sourceList.view.superview!)
    let position = (isOpen ? 0 : self.lastWidth)

    if isOpen {
        self.lastWidth = sourceList.view.frame.size.width
    }

    NSAnimationContext.runAnimationGroup({ context in
        context.allowsImplicitAnimation = true
        context.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
        context.duration = self.duration

        self.splitView.setPosition(position, ofDividerAtIndex: 0)
    }, completionHandler: { () -> Void in
    })
}
Run Code Online (Sandbox Code Playgroud)

期望的行为和外观是Mail.app,它的动画效果非常好.

我在https://github.com/mdiep/NSSplitViewTest上有一个完整的示例应用程序.

cocoa appkit nssplitview

7
推荐指数
2
解决办法
4674
查看次数

将图像绑定到NSArrayController的NSPopupbutton

这个问题是链接的扩展(链接中
的问题主要是目标,将NSPopupbutton绑定到NSArrayController)

我有一个Person有类属性NSString *nameNSImage *avatar
我都必须表现弹出按钮人员的所有名称作为下面的图片中看到的. 在此输入图像描述

但是现在,随着要求的变化,我也需要展示人的化身.
如何使用Cocoa绑定将人的头像绑定到NSPopup按钮,使其看起来像上面图像中的michael(最后一个菜单选项)


注意:Michael已使用以下代码暂时添加进行演示:

person.title = @"Michael";
person.image = [NSImage imageNamed:@"avatar.png"];
[_popupButton.menu addItem:person];
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c appkit cocoa-bindings

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

自上而下滑块

我在OSX 10.10上使用XCode 6.1.1

我有一个以下的可可窗口

可可窗口

我无法仅使用IB制作垂直自上而下的滑块.(B视图中的第二个滑块)
如示例中所示

  • 对于水平滑块,当我将另一个滑块的布局设置为"从右到左"时,它可以正常工作.(如A视图中所示)
  • 但是对于垂直滑块,当我将其设置为"从右到左"滑块时,它不会以其他方式工作.(如B视图中所示).
  • 我也试过使用setFrameCenterRotation,它解决了目的,但自动分析搞砸了.(如图C所示)

    这似乎是一个XCode错误.


那么如何仅使用IB制作自上而下的滑块呢?

macos cocoa appkit

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

SwiftUI列表中的可编辑TextField

在beta6 SwiftUImacOS(不是 iOS)应用中,我需要List具有可编辑的文本字段,但是TextField列表中的s是不可编辑的。它工作正常,如果我换出ListForm(或仅仅VStack),但我需要它工作List。有什么技巧告诉列表使字段可编辑吗?

import SwiftUI

struct ContentView: View {
    @State var stringField: String = ""

    var body: some View {
        List { // works if this is VStack or Form
            Section(header: Text("Form Header"), footer: Text("Form Footer")) {
                TextField("Line 1", text: $stringField).environment(\.isEnabled, true)
                TextField("Line 2", text: $stringField)
                TextField("Line 3", text: $stringField)
                TextField("Line 4", text: $stringField)
                TextField("Line 5", text: $stringField)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

appkit swiftui

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

从NSOutlineView中削减几个级别的缩进

我有一个大纲视图,我想要缩进顶部的几个级别(他们有一个独特的外观反正),但我想缩进后面的水平.我怎样才能做到这一点?

我已经尝试重写-levelForRow:-levelForItem:从返回值中减去2,但这没有帮助.我也尝试重写-frameOfOutlineCellAtRow:从帧的宽度中减去2*indentationPerLevel,但这也没有帮助,可能是因为我没有显示透露三角形.有关如何解决此问题的任何想法?

大纲视图绑定到a NSTreeController,这使得难以展平底层数据结构,但我确实有一个大纲视图委托设置.

macos cocoa objective-c nsoutlineview appkit

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

复制到剪贴板的文件为空,粘贴时"丢失沙盒扩展"

我有一个将文件复制到剪贴板的应用程序.以下是相关代码(参数是包含文件路径的NSStrings数组):

NSMutableArray *filesToCopy = [[NSMutableArray alloc] init];        
int i;
for (i=1; i < [arguments count]; i++) {
    NSString* pathToFile = [arguments objectAtIndex:i];
    NSURL* fileURL = [[NSURL alloc] initFileURLWithPath:pathToFile];
    [filesToCopy addObject:fileURL];
}

NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
NSInteger changeCount = [pasteboard clearContents];
BOOL OK = [pasteboard writeObjects:filesToCopy];
Run Code Online (Sandbox Code Playgroud)

但是,在尝试将程序复制到剪贴板的文件粘贴到Mail中的空电子邮件时进行测试时,通常该文件显示为零字节,并且控制台上显示以下错误:

11/13/13 6:27:12.173 AM邮件[627]:无法从粘贴板获取有效的项目:[789514]:[public.file-url]的沙箱扩展名.11/13/13 6:27:12.174 AM邮件[627]:无法获得itemIdentifier(789514)的沙箱扩展.沙箱扩展的数据为NULL

然后在控制台上出现以下错误:

11/13/13 8:24:41.947 AM sandboxd [172] :( [627])邮件(627)拒绝file-read-xattr [文件的完整路径]

奇怪的是,如果我从Finder复制文件,那么每次粘贴都没有错误.换句话说,Finder以某种方式将文件复制到剪贴板,其信息与我的方式不同.为了验证这一点,我做了一个简单的AppleScript来返回剪贴板信息.将文件复制到剪贴板后返回以下内容:

{{«class furl»,115},{«class utf8»,115},{«class ut16»,232},{string,115},{Unicode text,230}}

使用Finder将同一文件复制到剪贴板后,Applescript将返回以下内容:

{{«class furl»,33},{«class icns»,795020},{«class ut16»,112},{«class utf8»,55},{«class 8BPS»,1630436},{«class BMP »,4194358},{«class TPIC»,1059291},{TIFF picture,4197954},{«class PNGf»,392648},{«class jp2»,213480},{GIF …

macos cocoa objective-c appkit osx-mavericks

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

如何以可视格式设置自动布局默认间距度量的优先级?

自动布局使用-符号指示约束应使用默认间距.有没有办法在不必明确设置度量值的情况下设置该间距的优先级?

例如,以下可视格式将在myView其superview 之间创建一个等于默认Cocoa/CocoaTouch值的前导约束.但是这种约束具有优先权required.

@"H:|-[myView]"

以下将创建具有较低优先级的前导约束,但必须指定显式度量值:

@"H:|-(10@750)-[myView]"

我希望能够为前导约束赋予优先级,但不是明确的度量.理由是1)我不想猜测Apple的价值是什么,以及2)如果Apple改变了这个价值,那么将来会证明这一点.

理想情况下,我喜欢以下内容:

@"H:|-(@750)-[myView]" 要么 @"H:|-(-@750)-[myView]"

但这两种语法都不被接受.是否有一个秘密格式字符串可以实现这一目标?

(我不认为iOS和MacOS之间有这样的差异,但如果有,我的目标是MacOS.)

cocoa cocoa-touch uikit appkit autolayout

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