1

我试过用这个:

1)创建NSOpenPanelExtension.h包含以下内容的文件:

#import <Cocoa/Cocoa.h>

@interface NSOpenPanel (Extension)

- (void)setCancelButtonTitle:(NSString *)newTitle;

@end

2)创建NSOpenPanelExtension.m包含以下内容的文件:

#import "NSOpenPanelExtension.h"

@implementation NSOpenPanel (Extension)

- (void)setCancelButtonTitle:(NSString *)newTitle
{
NSRect oldFrame = [_cancelButton frame];

[_cancelButton setTitle:newTitle];
[_cancelButton sizeToFit];

NSRect newFrame = [_cancelButton frame];
float delta = oldFrame.size.width - newFrame.size.width;

[_cancelButton setFrameOrigin:NSMakePoint(oldFrame.origin.x + delta,
oldFrame.origin.y)];
}

@end

3)在需要的地方使用它:

#import "NSOpenPanelExtension.h"
...
NSOpenPanel *panel = [NSOpenPanel openPanel];  
[panel setCancelButtonTitle:@"NO!"];

但是当[panel setCancelButtonTitle:@"NO!"]NSOpenPanel崩溃并且这出现在我的控制台上时(以及通常的错误和代码):

*** Assertion failure in -[NSRemoteOpenPanel forwardingTargetForSelector:], /SourceCache/RemoteViewServices/RemoteViewServices-80.5/NSRemoteSavePanel.m:1975
An uncaught exception was raised
sandboxed save/open panel presently acting unlike a panel

怎么了?如何更改 a 的取消按钮标题NSOpenPanel?示例代码将不胜感激!

4

1 回答 1

0

此问题可能与App Sandbox Design Guide 中提到的 NSOpenPanel 更改有关:

为您的应用启用 App Sandbox 时,某些 NSOpenPanel 和 NSSavePanel 方法的行为会有所不同:

您不能使用 ok: 方法调用 OK 按钮。

您不能使用 NSOpenSavePanelDelegate 协议中的 panel:userEnteredFilename:confirmed: 方法重写用户的选择。

此外,NSOpenPanel 和 NSSavePanel 类的有效运行时继承路径与 App Sandbox不同...

于 2012-10-09T19:48:36.720 回答