2009-05-05 6 views
3

私はコアデータテーブルを持っていて、メニューバーの項目にテーブル内の行数を表示させたいと思います。私はすでにこのコードを使用して、メニューバーの項目を作成しました:どのようにしてメニューバー項目にテーブル内の行数を表示させるのですか?

-(void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
NSStatusItem *statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain]; //Create new status item instance 
[statusItem setHighlightMode:YES]; //This does something, I'm sure of it. 
[statusItem setTitle:[NSString stringWithFormat:@"%C",0xff50]]; //This labels it. You can also use setImage instead to use an icon. That current code will result in a item labeled "p" 
[statusItem setEnabled:YES]; //Self explanatory 
[statusItem setMenu:theMenu]; 
[statusItem setToolTip:@"TOOLTIP HA AWESOME AMIRITE?"]; //Optional, just for kicks. 
} 

私はメニューバーの項目がテーブルにある行数を表示するために追加するには何が必要ですか?

答えて

4

あなたがこのアプローチを試すことができます更新ライブ必要としない場合:

1)theMenuのデリゲートを設定します。

[theMenu setDelegate:self]; 

2)とデリゲートMethodeの実装:

- (void)menuWillOpen:(NSMenu *)menu { 
    NSUInteger count = [self.tableView numberOfRows]; 
    [[menu itemAtIndex:0] setTitle: [NSString stringWithFormat:@"%d rows", count]]; 
} 

このコードは、ユーザーがメニューを開くたびにメニュー項目を更新します。テーブルの内容が変わるたびにリフレッシュするには、KVOを使用してアレイコントローラを観察する必要があります。 StatusItemのタイトルにカウントを表示する場合は、KVOも使用する必要があります。

+0

私はそのコードをどこに入力するのですか? – Joshua

+0

これを確認するだけで、メニューバーのドロップダウンメニューにない画面の最上部に行数が表示されます。右? – Joshua

+0

#1おそらくあなたのステータス項目を管理するのと同じコントローラにあります。 #2ステータス項目をクリックするとメニュー項目に表示されます。ステータス項目のタイトルを変更したいのであれば、配列コントローラのオブザーバとして自分自身を登録するのが一番良いでしょう(この場合、arrangedObjectsは動作するはずです)、observeValueForKeyPath:ofObject:change:context:methodeにタイトルを設定します。 –

関連する問題