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

どうしたの?のキャンセル ボタンのタイトルを変更するにはどうすればよいNSOpenPanelですか? サンプルコードをいただければ幸いです。

4

1 に答える 1

0

この問題は、 App Sandbox Design Guideに記載されている NSOpenPanel の変更に関連している可能性があります。

アプリでアプリ サンドボックスが有効になっている場合、特定の NSOpenPanel および NSSavePanel メソッドの動作が異なります。

ok: メソッドを使用して [OK] ボタンを呼び出すことはできません。

NSOpenSavePanelDelegate プロトコルの panel:userEnteredFilename:confirmed: メソッドを使用して、ユーザーの選択を書き換えることはできません。

さらに、NSOpenPanel クラスと NSSavePanel クラスの効果的なランタイム継承パスは、App Sandbox では異なります...

于 2012-10-09T19:48:36.720 に答える