8

私は学生クラスを持っています:

@interface student : NSObject{    
    NSString *name;
    NSDate *date;
}

そして私は学生のリストのためのNSMutableArrayを持っていて、それをこのようにNSPopUpButtonにバインドしました

コンテンツ: studentArray、arrangedObjects コンテンツ値: studentArray、arrangedObjects、名前

これで、次のように学生オブジェクトを取得できます。

-(IBAction)studentPopupItemSelected:(id)sender
{ 
    NSPopUpButton *btn = (NSPopUpButton*)sender;

    int index = [btn indexOfSelectedItem];  
    student *std = [studentArray objectAtIndex:index];

    NSLog(@"%@ => %@", [std name], [std date]);
}

NSPopUpButton から学生オブジェクトを直接取得する方法はありますか???? お気に入り:

NSPopUpButton *btn = (NSPopUpButton*)sender;
student *std = (student *)[btn objectValueOfSelectedItem];
4

3 に答える 3

3

ユーザーが NSPopUpButton の NSMenu で適切な NSMenuItem を選択すると送信される「 NSMenuDidSendActionNotification 」を利用して問題を解決しました。

このように、たとえば「awakeFromNib」にオブザーバーを登録できます

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(popUpSelectionChanged:)
                                             name:NSMenuDidSendActionNotification
                                           object:[[self myPopUpButton] menu]];

複数の NSPopUpButton がある場合は、それぞれにオブザーバーを登録できます。dealloc でオブザーバーを削除することを忘れないでください。

[[NSNotificationCenter defaultCenter] removeObserver: self];

popUpSelectionChanged では、タイトルを確認して、どのメニューが実際に通知を送信したかを確認できます。Attributes Inspector の Interface Builder でタイトルを設定できます。

- (void)popUpSelectionChanged:(NSNotification *)notification {    
    NSDictionary *info = [notification userInfo];
    if ([[[[info objectForKey:@"MenuItem"] menu] title] isEqualToString:@"<title of menu of myPopUpButton>"]) {
        // do useful things ...
    }
}
于 2012-12-15T21:51:27.870 に答える