Pergunta

Eu estou tendo um problema. Meu menu contextual está sendo exibido, mas os itens do menu não estão ativados. Portanto, meu novo código para exibir o menu é o seguinte:

NSMenu *defMenu = [[[NSMenu alloc] initWithTitle:@"default Contextual Menu"] autorelease];

[defMenu insertItemWithTitle:@"Open" action:@selector(openFile) keyEquivalent:@"" atIndex:0];

[defMenu insertItemWithTitle:@"Delete" action:@selector(deleteFile) keyEquivalent:@"" atIndex:1];

return defMenu;

e os declaratonos de função de DeleteFile e OpenFile são os seguintes:

-(int)openFile;

-(int)deleteFile;

E estou chamando meu menu contextual da seguinte maneira:

-(void)doSingleClick 
{

    if([[NSApp currentEvent] modifierFlags] & NSControlKeyMask)
    {

        NSLog(@"control clicked.......");

        [NSMenu popUpContextMenu:[self defaultMenu] withEvent:[NSApp currentEvent] forView:tableView];

        return;
    }

}

Meus itens de menu contextual estão todos sombreados e não podem ser clicados. Por favor, você pode dizer onde estou dando errado.

Obrigado

Foi útil?

Solução

Sua openFile: O método toma um int como um parâmetro. Desde insertItemWithTitle:action:withObject:keyEquivalent:atIndex: leva um objeto, o seletor que você fornece também deve tomar um objeto.

Você pode usar NSNumber para embrulhar seu int como um objeto e simplesmente mudar seu openFile: Método para tomar um NSNumber em vez de um int. Igual a:

[defMenu insertItemWithTitle:@"Open" action:@selector(openFile:) withObject:[NSNumber numberWithInt:5] keyEquivalent:@"" atIndex:0];

- (void)openFile:(NSNumber *)fileNumber {
    int rowClicked = [fileNumber intValue];
    // Do whatever your old method did here
}

EDITAR: Para responder sua pergunta atualizada:

O motivo pelo qual os itens do seu menu estão desativados é que você só disse a eles que nome do método chamar. Você nunca disse aos itens em que instância do objeto Esses métodos devem realmente ser chamados. Para consertar isso, você precisa definir o destino dos itens:

NSMenuItem *openItem = [defMenu insertItemWithTitle:@"Open" action:@selector(openFile:) withObject:[NSNumber numberWithInt:5] keyEquivalent:@"" atIndex:0];
[openItem setTarget:self];

E assim por diante para cada item que você tem.

Outras dicas

Você não pode definir essa ação. Uma ação é um método que leva um argumento de objeto que representa o objeto que desencadeou a mensagem de ação. Você precisa criar uma ação no seu controlador que chama o método OpenFile: OpenFile:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top