Можно ли передать переменную в действие NSMenu? - PullRequest
5 голосов
/ 08 марта 2012

Я динамически создаю меню на основе массива, и есть подменю, связанное с IBAction, который открывает папку в Finder. Открываемая папка основана на свойстве объекта в моем исходном массиве.

Есть ли способ связать действие NSMenuItem с IBAction и передать эту переменную каталога, когда я динамически создаю этот массив?

ИЛИ я должен идти в IBAction и разрешать каталог, ссылаясь на NSMenuItem с массивом?

, например

person = [[Person alloc] init];
// person is assigned
subMenu = [[NSMenu alloc] init];
[subMenu addItemWithTitle:@"Open folder" action:@selector(openDirectory:person.directory) keyEquivalent:@""];

Ответы [ 2 ]

4 голосов
/ 08 марта 2012

Это то, что я преследовал.

NSMenuItem *menuItem;
menuItem = [subMenu addItemWithTitle:@"Open folder" action:@selector(openDirectory:person.directory) keyEquivalent:@""];
[menuItem setRepresentedObject:person];

Затем в своем IBAction я сделал что-то вроде этого, чтобы извлечь каталог:

- (IBAction)openDirectory:sender {
    Person *person = [sender representedObject];
    NSLog(@"directory: %@",person.directory);
3 голосов
/ 08 марта 2012

Действие принимает только параметр "(id) sender", куда объект, вызвавший действие, должен быть отправлен.

Но если ваш метод действия живет в каком-то объекте Objective C (а не в одиночном или каком-либо другом), вы можете легко ссылаться на свойства этого объекта из вашего действия.

Надеюсь, вам это понятно, а если нет, покажите немного своего IBAction кода и скажите нам, где он живет и как он объявлен.

...