如何在Cocoa AppKit应用程序中实现缩放/缩放(即不是最大化窗口而是缩放窗口及其所有子视图)?我认为它在iOS中称为zoomScale.它可以使用Core Animations或Quartz 2D(例如CGContextScaleCTM)完成,还是我被迫在我的所有NSView,NSCell等中手动实现它?
编辑我的nib用于基于文档的Cocoa应用程序,我看到当我选择了一个窗口或面板时,Xcode让我设置它的"初始位置":

这与窗口的框架分开,它在它上面,那么这是什么?
什么使用"初始位置",两个弹出菜单及其可能的值是什么意思?
当我运行我的应用程序并且我的文档为这个笔尖创建NSWindowController(两个中的第二个)时,窗口显示为从主文档窗口级联,而不是在初始位置.这是因为我的应用程序是基于文档的(即,"初始位置"将由不属于文档的窗口使用),还是有其他原因?
我想要一个文本字段,如Numbers中的表达式编辑器文本字段:

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

我必须将这些令牌嵌入到特定位置的文本中,否则它们的工作方式完全相同NSTokenField(退格会删除令牌,您可以将它们拖动等等).
有没有第一方或第三方控制做这样的事情?我没找到任何东西.
如果没有,你会如何推荐实施它?使用核心文本并重新发明轮子(实现NSTextField更好的令牌支持)?或者有更好的解决方案吗?
我已经尝试了我能想到的所有内容,包括我在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上有一个完整的示例应用程序.
这个问题是链接的扩展(链接中
的问题主要是目标,将NSPopupbutton绑定到NSArrayController)
我有一个Person有类属性NSString *name和NSImage *avatar
我都必须表现弹出按钮人员的所有名称作为下面的图片中看到的.

但是现在,随着要求的变化,我也需要展示人的化身.
如何使用Cocoa绑定将人的头像绑定到NSPopup按钮,使其看起来像上面图像中的michael(最后一个菜单选项)
注意:Michael已使用以下代码暂时添加进行演示:
person.title = @"Michael";
person.image = [NSImage imageNamed:@"avatar.png"];
[_popupButton.menu addItem:person];
Run Code Online (Sandbox Code Playgroud) 我在OSX 10.10上使用XCode 6.1.1
我有一个以下的可可窗口

我无法仅使用IB制作垂直自上而下的滑块.(B视图中的第二个滑块)
如示例中所示
我也试过使用setFrameCenterRotation,它解决了目的,但自动分析搞砸了.(如图C所示)
这似乎是一个XCode错误.
那么如何仅使用IB制作自上而下的滑块呢?
在beta6 SwiftUImacOS(不是 iOS)应用中,我需要List具有可编辑的文本字段,但是TextField列表中的s是不可编辑的。它工作正常,如果我换出List了Form(或仅仅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) 我有一个大纲视图,我不想要缩进顶部的几个级别(他们有一个独特的外观反正),但我也想缩进后面的水平.我怎样才能做到这一点?
我已经尝试重写-levelForRow:并-levelForItem:从返回值中减去2,但这没有帮助.我也尝试重写-frameOfOutlineCellAtRow:从帧的宽度中减去2*indentationPerLevel,但这也没有帮助,可能是因为我没有显示透露三角形.有关如何解决此问题的任何想法?
大纲视图绑定到a NSTreeController,这使得难以展平底层数据结构,但我确实有一个大纲视图委托设置.
我有一个将文件复制到剪贴板的应用程序.以下是相关代码(参数是包含文件路径的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 …
自动布局使用-符号指示约束应使用默认间距.有没有办法在不必明确设置度量值的情况下设置该间距的优先级?
例如,以下可视格式将在myView其superview 之间创建一个等于默认Cocoa/CocoaTouch值的前导约束.但是这种约束具有优先权required.
@"H:|-[myView]"
以下将创建具有较低优先级的前导约束,但必须指定显式度量值:
@"H:|-(10@750)-[myView]"
我希望能够为前导约束赋予优先级,但不是明确的度量.理由是1)我不想猜测Apple的价值是什么,以及2)如果Apple改变了这个价值,那么将来会证明这一点.
理想情况下,我喜欢以下内容:
@"H:|-(@750)-[myView]" 要么 @"H:|-(-@750)-[myView]"
但这两种语法都不被接受.是否有一个秘密格式字符串可以实现这一目标?
(我不认为iOS和MacOS之间有这样的差异,但如果有,我的目标是MacOS.)
appkit ×10
cocoa ×9
macos ×5
objective-c ×4
autolayout ×1
cocoa-touch ×1
nssplitview ×1
nstextfield ×1
nstokenfield ×1
nswindow ×1
swiftui ×1
uikit ×1
xcode ×1
xcode4 ×1
zoom ×1