Como adicionar vários itens de menu com o mesmo título ao NSpopupButton (NSMENU)?
-
22-09-2019 - |
Pergunta
Como os documentos dizem que é impossível adicionar dois itens de menu ao NSpopupButton se ambos tiverem o mesmo título. Eu estava tentando adicionar itens de menu ao [Menu PopupButton], mas sem sorte. Eu também estava tentando criar um novo menu, adicionar itens a ele e depois usar [PopUpButton Setmenu: Newmenu], mas não. O menu sempre exibe apenas um item por nome.
Mas eu sei que deve ser possível, se você tentar criar uma lista de reprodução inteligente no iTunes, poderá selecionar a "Lista de reprodução" no botão pop -up esquerdo "=" do meio, e o direito segurará itens de menu para cada lista de reprodução em iTunes, mesmo que eles tenham o mesmo título. Então, como eles fazem isso?
Solução
Eu tinha o problema exato e ele foi resolvido facilmente. Ao invés de usar NSPOPUPBUTON Métodos como –AdditemWithtitle: Para manipular os itens do botão, adicionei um NsarrayController e adicionou os itens ao controlador da matriz. Em seguida, usei as ligações para ligar o controlador e o botão pop -up e agora ele mostra itens com os mesmos títulos.
Para fazer as ligações:
- Adicione um NsarrayController em ib.
- Colocou o NSPOPUPBUTON ligações para "Contente" para a organização do controlador com o "Chave do controlador" ser "OrganizedObjects"
- Colocou o NSPOPUPBUTON ligações para "Índice selecionado" para a organização do controlador com o "Chave do controlador" ser "SelectionIndex"
- Opcional] Selecione o controlador de matriz e defina o Nome da classe Em atributos para qualquer classe que seus itens sejam, por exemplo, NSString ou você pode usar o padrão Nsmutabledictionary E adicione as teclas na caixa abaixo, que consequentemente permite envolver seus itens em um dicionário e adicione teclas diferentes para o que deseja mostrar no botão pop -up e o que deseja ter em segundo plano. Para definir qual chave do dicionário você deseja refletir no botão pop -up, vá para as ligações do botão pop -up para "Contente" novamente e definir o "Caminho -chave modal" à chave que você adicionou no atributo do controlador de matriz.
Outras dicas
Embora os métodos NSPOPUPBTOTN como AddItemWithTitle: e Addmenu: não permitam nomes duplicados, é definitivamente possível ter itens com o mesmo título. Você simplesmente precisa definir o nome no próprio nsmenuitem.
Por exemplo, se você tiver uma variedade de cordas (como nomes da lista de reprodução, talvez), deseja adicioná -las a um botão pop -up e garantir que as duplicatas estejam lá, faça assim:
NSArray* items = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", @"Foo", nil];
for (NSString* item in items)
{
[popupButton addItemWithTitle:@"blah"];
[[popupButton lastItem] setTitle:item];
[[popupButton lastItem] setTarget:self];
[[popupButton lastItem] setAction:@selector(something:)];
}
Ao invés de usar addItemWithTitle:
, você pode criar um nsmenuitem manualmente e adicioná -lo diretamente ao menu. Isso permite que você especifique qualquer título que desejar, além de poder inseri -lo em qualquer local no menu.
NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"foo" action:@selector(something:) keyEquivalent:@""];
[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];