是否有适用于Mac OS X文档图标的模板?它看起来像一张白纸,右上角向下弯曲.很多应用程序似乎都使用此图标作为自己的自定义文档类型的基础.每个人都使用模板作为基本形状,还是每个开发人员都必须从头开始绘制自己的模板?
我知道你可以在这里获得普通文档图标:
/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/GenericDocument.icns
Run Code Online (Sandbox Code Playgroud)
但这是.icns格式,而不是我可以轻松编辑的格式.此外,如果您希望文档背景为白色,则不容易.
如果每个图标大小(512,256,128,32,16)都有可用的Photoshop(.psd)模板,那就太好了.
如何仅为已填充的行在NSTableView中绘制网格线?当我将网格样式掩码设置为NSTableViewSolidHorizontalGridStyleMask时,它会为所有行绘制网格线,无论是否填充.
我正在寻找一些示例代码来做到这一点.
我想在Interface Builder中设置的NSTextFields有阴影.我已经实现了一种方法,这似乎有效,但我不确定它是否正确.
我所做的是将NSTextFieldCell子类化为如下,然后将我的子类设置为IB中的NSTextField的单元格类型.这种方法有问题吗?有没有更好的办法?
#import "ShadowTextFieldCell.h"
static NSShadow *kShadow = nil;
@implementation ShadowTextFieldCell
+ (void)initialize
{
kShadow = [[NSShadow alloc] init];
[kShadow setShadowColor:[NSColor colorWithCalibratedWhite:0.f alpha:0.08f]];
[kShadow setShadowBlurRadius:0.f];
[kShadow setShadowOffset:NSMakeSize(0.f, -2.f)];
}
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
[kShadow set];
[super drawInteriorWithFrame:cellFrame inView:controlView];
}
@end
Run Code Online (Sandbox Code Playgroud) 我想自定义我在OS X上绘制窗口标题栏的方式.具体来说,我想做一些像Twitterrific应用程序,其中有自定义关闭按钮,没有最小/最大按钮,以及窗口标题文本是对的.与Twitterrific不同,我不打算自定义绘制整个窗口(尽管我并不完全反对).
我已经看过Cocoa With Love上的RoundWindow示例以及Apple提供的RoundTransparentWindow示例,但似乎都不合适.
如何检测用户何时打开OS X Mountain Lion通知中心?
是否有我可以观察到的NSNotification(呃,非常相似的术语)?
在Xcode中编译Mac应用程序与设置为i386 vs x86_64的Active Architecture(在主窗口左上角的下拉列表中选择)之间有什么区别?在项目的构建设置中,架构选项是标准(32/64位通用),32位通用和64位Intel.实际上,这些意味着什么以及如何决定?
假设一个目标是OS X 10.5及更高版本.我在Activity Monitor中看到,编译x86_64会导致应用程序使用的内存多于为i386编译的内存.有什么好处?我知道64位是"未来",但考虑到更高的内存使用率,选择32位是否有意义?
我有一个基于视图的单列NSTableView.在我的NSTableCellView子类中,我有一个可选的NSTextView,但不可编辑.
当用户直接单击NSTableCellView时,该行会正确突出显示.但是当用户单击NSTableCellView内的NSTextView时,该行不会突出显示.
如何将NSTextView上的单击传递给NSTableCellView以使该行突出显示?
类层次结构如下所示:NSScrollView> NSTableView> NSTableColumn> NSTableCellView> NSTextView
我想在我的Mac应用程序中包含一个按钮,当按下该按钮时,将启动用户的默认日历应用程序.我希望日历可以在特定日期开放.
这适用于OS X Mountain Lion.
有没有一般的方法来做到这一点?
编辑:FWIW,这就是我现在正在做的事情:
- (IBAction)launchCalendarApp:(id)sender
{
[[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/Calendar.app"];
}
Run Code Online (Sandbox Code Playgroud)
我知道硬编码这样的道路是一个坏主意,这就是为什么我在问这个问题.
更新:这是我最终做的事情:
- (IBAction)launchCalendarApp:(id)sender
{
NSWorkspace *sharedWorkspace = [NSWorkspace sharedWorkspace];
NSString *iCalPath = [sharedWorkspace absolutePathForAppBundleWithIdentifier:@"com.apple.iCal"];
BOOL didLaunch = [sharedWorkspace launchApplication:iCalPath];
if (didLaunch == NO) {
NSString *message = NSLocalizedString(@"The Calendar application could not be found.", @"Alert box message when we fail to launch the Calendar application");
NSAlert *alert = [NSAlert alertWithMessageText:message defaultButton:nil alternateButton:nil otherButton:nil informativeTextWithFormat:@""];
[alert setAlertStyle:NSCriticalAlertStyle];
[alert runModal];
}
}
Run Code Online (Sandbox Code Playgroud)
听起来,在开发更好的API之前,所有可行的方法都是变通方法.我的解决方案类似于Jay的建议.我正在使用包标识符来获取路径,因为我认为它不那么脆弱.即使他们(或用户)决定重命名应用程序,Apple也不太可能在未来更改软件包ID.不幸的是,这种方法并没有让我到达特定日期.当我有更多时间时,我会进一步调查一些其他建议(使用ical://等).
更新2:NSGod下面有一个很棒的答案,如果您的应用程序没有沙盒,也可以打开日历到特定日期.
我想使用自定义NSSplitView与我NSSplitViewController。
该文件说:
要提供自定义的拆分视图,请在继承的viewDidLoad()方法中调用super之前随时设置此属性。也就是说,在拆分视图控制器的isViewLoaded属性为true之前。
我的NSSplitViewController子类称为MainVC。
我尝试-viewDidLoad在调用之前设置我的自定义拆分视图[super viewDidLoad]:
- (void)viewDidLoad {
self.splitView = [MySplitView new];
[super viewDidLoad];
// Rest of viewDidLoad...
}
Run Code Online (Sandbox Code Playgroud)
但这没用。我收到以下错误:
2017-09-02 10:35:43.527312-0700 Zee [6497:632581] ** *-[MainVC setSplitView:],/ BuildRoot / Library / Caches / com.apple.xbs / Sources / AppKit / AppKit-中的声明失败1561 / Controllers / NSSplitViewController.m:220
2017-09-02 10:35:43.527558-0700 Zee [6497:632581] MainVC:-splitView只能在加载视图之前分配
我也尝试覆盖loadView:
- (void)loadView {
self.splitView = [MySplitView new];
[super loadView];
}
Run Code Online (Sandbox Code Playgroud)
但是我得到:
2017-09-02 10:39:39.377345-0700 …
所有节日快乐.当我得到答案时,我可能会感到非常愚蠢,但我想知道如何使用CSS"-webkit-appearance:searchfield-results-decoration"规则在搜索框内绘制一个小放大镜.
我想创建一个类似于apple.com右上角的搜索框.它应该有圆角,放大镜图标,以及用户开始输入后出现的取消/清除按钮.我可以通过大部分方式获得
<input type="search" />
Run Code Online (Sandbox Code Playgroud)
但这缺乏放大镜图标.我也知道我可以使用"-webkit-appearance:searchfield"来设置输入元素的样式,但这似乎只是使圆角没有正确的左/右填充,图标或取消按钮.
我只关心在Webkit中使用它,因为它将在Cocoa WebView中使用.我不需要IE,Firefox,Opera等的标记.
从NSTextView中提取第一个非空白行的最有效方法是什么?
例如,如果文本是:
\n
\n
\n
This is the text I want \n
\n
Foo bar \n
\n
Run Code Online (Sandbox Code Playgroud)
结果将是"这是我想要的文字".
这是我有的:
NSString *content = self.textView.textStorage.string;
NSInteger len = [content length];
NSInteger i = 0;
// Scan past leading whitespace and newlines
while (i < len && [[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember:[content characterAtIndex:i]]) {
i++;
}
// Now, scan to first newline
while (i < len && ![[NSCharacterSet newlineCharacterSet] characterIsMember:[content characterAtIndex:i]]) {
i++;
}
// Grab the substring up to that newline
NSString *resultWithWhitespace = …Run Code Online (Sandbox Code Playgroud) MacOS 10.12+、Xcode 8+、Swift 3:
我想以编程方式自定义 NSTableView 标题的字体和绘图。我知道有关于此的较旧的问题,但我今天找不到任何有效的方法。
例如,我尝试将 NSTableHeaderCell 子类化以设置自定义字体:
class MyHeaderCell: NSTableHeaderCell {
override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView) {
NSLog("MyHeaderCell is drawing")
font = NSFont.boldSystemFont(ofSize: 12)
super.drawInterior(withFrame: cellFrame, in: controlView)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的表视图中使用该子类:
tableColumn.headerCell = MyHeaderCell()
Run Code Online (Sandbox Code Playgroud)
我在控制台中看到消息“MyHeaderCell 正在绘制”,但表格标题的字体没有改变。
cocoa ×9
macos ×6
nstableview ×2
nstextview ×2
32bit-64bit ×1
appkit ×1
calendar ×1
css ×1
html5 ×1
icons ×1
nssplitview ×1
nsstring ×1
nstextfield ×1
objective-c ×1
swift3 ×1
webkit ×1
xcode ×1