Qual é o objetivo de usar IBOutlets e IBActions no Xcode e no Interface Builder?
Faz alguma diferença se eu não usar IBOutlets e IBActions?
Rápido:
@IBOutlet weak var textField: UITextField!
@IBAction func buttonPressed(_ sender: Any) { /* ... */ }
Objetivo-C:
@property (nonatomic, weak) IBOutlet UITextField *textField;
- (IBAction)buttonPressed:(id)sender { /* ... */ }
Respostas:
IBAction
eIBOutlet
são macros definidas para indicar variáveis e métodos que podem ser referidos no Interface Builder.IBAction
resolvevoid
eIBOutlet
resolve para nada, mas significa para o construtor Xcode and Interface que essas variáveis e métodos podem ser usados no construtor Interface para vincular elementos da interface do usuário ao seu código.Se você não usará o Interface Builder, não precisará deles em seu código, mas se quiser usá-lo, precisará especificar os
IBAction
métodos que serão usados no IB eIBOutlet
nos objetos. que será usado no IB.fonte
IBOutlet
não resolveid
. Considere o seguinte:IBOutlet UILabel *nameLabel;
- se forIBOutlet
resolvidoid
, esse código será lido, oid UIlabel *namelabel;
que produzirá um erro do compilador. Como afirmei originalmente,IBOutlet
resolve em nada.A maneira tradicional de sinalizar um método para que ele apareça no Interface Builder, e você pode arrastar uma conexão a ele, é fazer com que o método retorne o tipo IBAction. No entanto, se você tornar seu método nulo, em vez disso (IBAction é # definido para ser nulo) e fornecer um argumento (id), o método ainda estará visível. Isso fornece flexibilidade extra, sempre
Todos os três são visíveis no Interface Builder:
Consulte o Guia do usuário do Apple Interface Builder para obter detalhes, particularmente a seção intitulada Xcode Integration.
fonte
É necessário usar o IBOutlet e o IBAction se você estiver usando o construtor de interface (daí o prefixo IB) para os componentes da GUI. O IBOutlet é necessário para associar propriedades em seu aplicativo a componentes no IB, e o IBAction é usado para permitir que seus métodos sejam associados a ações no IB.
Por exemplo, suponha que você defina um botão e um rótulo no IB. Para alterar dinamicamente o valor do rótulo pressionando o botão, você definirá uma ação e propriedade em seu aplicativo semelhante a:
Em IB, você conectaria o myLabel ao rótulo e o método pushme ao botão. Você precisa do IBAction e do IBOutlet para que essas conexões existam no IB.
fonte
(void)
método no Interface Builder.O Interface Builder os utiliza para determinar quais membros e mensagens podem ser conectados aos controles da interface que você está usando em sua janela / exibição.
IBOutlet e IBAction estão puramente lá como marcadores que o Interface Builder procura quando analisa seu código em tempo de design; eles não afetam o código gerado pelo compilador.
fonte
Analisou o diagrama enquanto olhava para a codificação de valores-chave, e pensou que isso poderia ajudar alguém. Ajuda a entender o que é o IBOutlet.
Observando o fluxo, foi possível ver que os IBOutlets estão lá apenas para corresponder o nome da propriedade com um nome de controle no arquivo Nib.
fonte
Uma saída é um link do código para a interface do usuário. Se você deseja mostrar ou ocultar um elemento da interface do usuário, se deseja obter o texto de um campo de texto ou ativar ou desativar um elemento (ou centenas de outras coisas), é necessário definir uma saída desse objeto nas fontes e vincular essa saída através do "objeto de interface" para o elemento da interface do usuário. Depois disso, você pode usar a tomada como qualquer outra variável na sua codificação.
IBAction - um método especial acionado por objetos da interface do usuário. O Interface Builder os reconhece.
Para mais informações, consulte Apple Docs.
fonte
IBAction e IBOutlets são usados para conectar sua interface feita no Interface Builder ao seu controlador. Se você não usar o Interface Builder e construir sua interface completamente em código, poderá criar um programa sem usá-los. Mas, na realidade, a maioria de nós usa o Interface Builder, uma vez que você deseja obter alguma interatividade em sua interface, precisará usar IBActions e IBoutlets.
fonte
IBOutlet
IBAction
@ - Padrão dinâmico IB - Interface Builder
fonte
Um dos principais comentários sobre esta pergunta pergunta especificamente:
Esta pergunta é respondida bem pelo NSHipster:
IBAction
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#ibaction
IBOutlet:
https://nshipster.com/ibaction-iboutlet-iboutletcollection/#iboutlet
fonte
Quando você usa o Interface Builder, pode usar o Connections Inspector para configurar os eventos com manipuladores de eventos, os manipuladores de eventos devem ser as funções que possuem o modificador IBAction. Uma visualização pode ser vinculada à referência para o mesmo tipo e ao modificador IBOutlet.
fonte