Cocoa usa método de caixa de diálogo personalizado

A caixa de diálogo é na verdade uma janela. Criamos um arquivo xib no construtor de interface, arrastamos uma janela e, em seguida, projetamos nossa caixa de diálogo. Depois que a interface é projetada, precisamos de código para controlar o comportamento da caixa de diálogo, como quando exibir e quando ocultar Assim como algumas respostas de eventos, NSWindowController pode ser usado neste momento.

Crie uma nova subclasse NSWindowController DialogController, defina o fileOwner no arquivo xib recém-criado para o tipo DialogController no construtor de interface, puxe a linha para associar a janela em FileOwner com a janela de diálogo e a associação de outros controles e, em seguida, adicione a lógica necessária ao DialogController Código, tal design de caixa de diálogo completo está completo. Em seguida, você pode chamar sua caixa de diálogo personalizada no AppControlelr do seu programa, definir e inicializar um objeto do tipo DialogController, da seguinte maneira:

DialogController * dialogCtl;

dialogCtl = [[DialogController alloc] initWithWindowNibName: @ "DialogName"]; // DialogName é o nome do seu arquivo xib, nenhum sufixo é necessário

[dialogCtl loadWindow];

Existem duas maneiras de exibir caixas de diálogo no Mac, uma é igual à caixa de diálogo do Windows e a outra é a caixa de diálogo Folha (roll-up).

Caixa de diálogo de estilo do Windows, dividida em modal e não modal

Não modal: [[dialogCtl window] makeKeyAndOrderFront: nil];

模 态 : [NSApp runModalForWindow: [dialogCtl window]];


As caixas de diálogo da planilha são todas caixas de diálogo modais e o modo de exibição:

NSApp beginSheet: [dialogCtl window]
       modalForWindow: [NSApp mainWindow]
        modalDelegate: nil
       didEndSelector: nil
          contextInfo: nil];
    
[NSApp runModalForWindow: [dialogCtl window]];

Se você usar uma caixa de diálogo de planilha, quando a caixa de diálogo for encerrada, será necessário chamar o seguinte código no DialogController:

[NSApp stopModal];
[Planilha final NSApp: [janela própria]];
[[janela própria] orderOut: nulo];

Caso contrário, embora a caixa de diálogo desapareça, a janela principal ainda está em um estado modal e não pode responder. Clicar em voltar causará um som de "pop", você sabe.

Acho que você gosta

Origin blog.csdn.net/qq_27740983/article/details/50242529
Recomendado
Clasificación