Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Eu não entendi NADA!!

Como esse codigo poderia ter surgido efeito?

Nem deu para VALIDAR o codigo, ou seja dizia que estava imcompativel...

Acho que voce nao me entendeu muito bem.

Como EU posso EXECUTAR uma IBAction, dentro de OUTRA IBAction.

É QUE NEM rodar um programa dentro de um programa.

EU presciso executar atraves de um codigo!

Acho que deu para sacar, né?

Se não nao dá.

Agradeço qualquer ajuda.

Editado por Raphael Rivas
Link para o comentário
Compartilhar em outros sites

Cara, primeiro de tudo, use menos caixa alta, pois parece que você está gritando, e isso é rude... apenas normas de etiqueta da internet...

anyway, se você quer chamar uma função dentro de um IBAction, faça:


- (void) FazerAlgo {
NSLog("Fazendo algo...");
}
- (IBAction)BotaoApertado:(id)sender {
// Um pouco de codigo
// Mais um pouco de codigo
if (x == y) {
[self FazerAlgo];
}
}
[/CODE]

Se você nem ao menos sabe o que o (id) signfica, acho que seria aconselhável que você estudasse um pouco mais de Objective-C, Cocoa Touch e Orientação a Objeto. Não espere que escrevam o código para você ;)

Editado por Gabriel Vincent
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

O id é o tipo do parâmetro a ser passado para a função (método). O uso dele é desencorajado pela Apple (mesmo o próprio xCode tendo vários métodos que o utilizam), pois ele funciona como se fosse um curinga, ou seja, pode ser o que quiser! É como se fosse uma tipagem dinâmica. O id pode assumir valores numéricos, strings, flutuante, ou qualquer tipo de objeto que possa ser utilizado.

Dê uma lida na documentação do XCode. Lá tem muita coisa para se aprender!

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...

Programar para iOS é uma questão de saber onde colocar as coisas. Por isto existe o paradigma do MVC.

Vamos aos princípios. IBAction é apenas uma sinalização para o Interface Builder, por isso IB, de que alí é um Target-action. Isso facilita na hora de fazer as conexões visualmente no construtor de interfaces.

IBAction é um typedef para void. Não retorna nada.

No modelo MVC as únicas duas formas que seu view tem de comunicar de volta com o controller é via DELEGATE ou via TARGET-ACTION. Só. Qualquer apontamento direto para o controller é violar o MVC. Não queria jamais fazer isso, senão vc vai falhar rápido.

Se você quer executar este método diretamente e ele é um IBAction, certifique-se primeiramente ele é um VIEW, como um botão(UIButton), slider (UISlider), etc.

Chamar um IBAction por algo que não seja um VIEW é um erro de semântica e é errado.

Se você tiver um VIEW e deseja chamar a função, use o método correto, que é o mesmo que o IB cria pra você quando você cria as conexões visualmente:

- (void)addTarget:(id)target forAction:(SEL)selector forControlEvents:(UIControlEvents)controlEvents;

Target: seu controller, ou quem é responsável por executar o selector, geralmente self.

Selector: o método IBAction, chamado por @selector(metodo)

controlEvents: o tipo de evento que será disparado, existem vários. Use o que melhor encaixa em sua necessidade.

Sobre o "id", ele é simplesmente um ponteiro para um objeto. Seu uso NÃO é desencorajado pela Apple e tem uma utilidade incrível. Ele quer dizer "vou receber qualquer objeto como parâmetro".

O que a documentação diz é que você deve saber o que está fazendo ao usar id, pois se você enviar uma mensagem para um objeto que não responde a determinado metodo, seu app trava. A melhor alternativa é usar introspecção, que é perguntar se o objeto pertence a determinada classe: [obj isKindOfClass:].

No seu caso, se deseja chamar o metodo por umboleto que não seja um View,não use um IBAction, use um metodo normal:

- (void)metodo:parametro1:parametro2

... E dentro do seu IBAction você chama o mesmo método:

- (IBAction) metodo:(id)sender{

[self metodo];

}

É tudo uma questão de design da sua classe.

Mas tenha em mente o seguinte: não viole o MVC, use IBActions só para Views e se for usar id use introspecção para verificar se o que você enviou responde ao método.

Espero ter ajudado!

Abraço.

Link para o comentário
Compartilhar em outros sites

tenho uma duvida, talvez bem imbecil, mas é uma duvida:

preciso que ao acionar o botão para fazer um calculo o método verifique se todos os campos estão preenchidos com valores maior que zero, caso contrario ele muda o Label para: Preencha os campos, se estiver tudo certo ele procede com o calculo.

o calculo eu consegui fazer, mas ele verificar e retornar a msg quando tiver zero como valor eu não consigo, alguém ajuda?

agradeço desde já

Link para o comentário
Compartilhar em outros sites

tenho uma duvida, talvez bem imbecil, mas é uma duvida:

preciso que ao acionar o botão para fazer um calculo o método verifique se todos os campos estão preenchidos com valores maior que zero, caso contrario ele muda o Label para: Preencha os campos, se estiver tudo certo ele procede com o calculo.

o calculo eu consegui fazer, mas ele verificar e retornar a msg quando tiver zero como valor eu não consigo, alguém ajuda?

agradeço desde já

Simples, amigo:


if ([textField.text isEqualToString:@"0"]) {
label.text = @"Digite um valor maior que zero!";
}
[/CODE]

Ou então:

[CODE]
if (textField.text.intValue == 0) {
label.text = @"Digite um valor maior que zero!";
}
[/CODE]

Esse segundo [b][color=#0000ff]if[/color][/b] será verdadeiro também se o usuário não entrar com valor nenhum no TextField.

Espero ter ajudado

Editado por Gabriel Vincent
Link para o comentário
Compartilhar em outros sites

Participe do debate

Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.

Visitante
Responder este tópico…

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Limpar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.



×
×
  • Criar Novo...