2011-11-14 1 views
0

私はモーダルウィンドウを持っています。そのコントローラでは、私はこれを行う:NSFontManager setTarget:モーダルウィンドウでは機能しません

[[NSFontManager sharedFontManager] orderFrontFontPanel:self]; 

それはうまく動作します。フォントマネージャは私のコントローラのchangeFont:メソッドを呼び出します。

しかし、私が代わりにこのコードを書いた場合:

[[NSFontManager sharedFontManager] setTarget:self]; 
[[NSFontManager sharedFontManager] setAction:@selector(qwe:)]; 
[[NSFontManager sharedFontManager] orderFrontFontPanel:self]; 

それは動作しません。フォントパネルでフォントを選択すると、qwe:メソッドが呼び出されません。

その理由は、ウィンドウがモーダルであるからです(私がモーダルセッションなしでウィンドウを表示するとすべて正常に動作します)。疑問はなぜモーダルウィンドウでターゲットアクションバリアントが機能しないのか?

ありがとうございました。

答えて

4

これも表示されます。ターゲットとアクションを設定しても、アクションメソッドが呼び出されるわけではありません。

何の仕事をしたことはこれです:(1)代理人ではなく、目標を設定し、(2)の方法changeFontに名前を付け、(3)アクションを設定しないでください:

@property (retain) NSFont *font; 

... 

- (void)changeFont:(id)sender 
{ 
    self.font = [sender convertFont:self.font]; 
} 

- (IBAction)actionSetFont:(id)sender 
{ 
    NSFontManager *fontManager = [NSFontManager sharedFontManager]; 
    [fontManager setDelegate:self]; 
    NSFontPanel *fp = [NSFontPanel sharedFontPanel]; 
    [fontManager setSelectedFont:self.font isMultiple:NO]; 
    [fp makeKeyAndOrderFront:self]; 
} 
関連する問題