Pergunta

Não tenho a certeza por que este código não vai funcionar. Quando eu clicar em um botão (ação: ButtonClick) que deve alterar as duas caixas de texto (MyTextLabel e MyTextLabel2) valor de incremento texto 'r' por um. Aqui está o código:

MainView.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface MainView : UIView {
    IBOutlet UIButton *MyButton;
    IBOutlet UILabel *MyTextLabel;
    IBOutlet UILabel *MyTextLabel2;
}

@property (nonatomic, retain) UIButton *MyButton;
@property (nonatomic, retain) UILabel *MyTextLabel;
@property (nonatomic, retain) UILabel *MyTextLabel2;


- (IBAction)buttonclick;
@end

MainView.m:

#import "MainView.h"
#include <stdlib.h>
#include <libc.h>

@implementation MainView

@synthesize MyButton, MyTextLabel, MyTextLabel2;

int r;

- (IBAction)buttonclick {
    r++
    if(r < 50) {
        MyTextLabel.text = @"< 50";
    }
    else {
        MyTextLabel2.text = @"=> 50";
    }
}
@end
Foi útil?

Solução

Eu tenho errado um sentimento de algo com a maneira que você está usando int r. Tente colocar static int r; no topo da linha @interface em MainView.h e também adicionar, sob a linha - (IBAction)buttonclick;:

+(void) initialize;

Em seguida, retire int r; de MainView.m. Então, em MainView.m add:

+(void) initialize {
   count = 0;
}

Outras dicas

Eu vejo dois problemas:

  1. Você não pode declarar int r onde você tê-lo. Você deve declará-la no bloco variável de sua interface (onde você declarar o seu botão e etiquetas ou fora de um método) ou na definição do método.
  2. A linha com r ++ não é terminada com um ponto e vírgula.

Você não diz na sua pergunta o que, exatamente, não está funcionando da maneira que você espera. Meu palpite é que vai ser a de que as tomadas não estão realmente conectado corretamente. Você pode querer adicionar uma declaração de registro para buttonClick assim:

NSLog(@"button click called! MyTextLabel is %@", MyTextLabel);

O ponto é, principalmente, para ter certeza que não é nil.

Em Objective-C, os nomes de variáveis ??e propriedades devem começar com uma letra minúscula em conformidade com o valor-chave de codificação protocolo (KVC) (sempre myButton, não MyButton). A directiva @synthesize conta com isso para gerar os setters e getters. Assim, por myButton @synthesize irá gerar -(void)setMyButton:(UIButton *)button e -(UIButton *)myButton.

Assim, fazem MyButton e seus colegas minúsculas e ver se isso ajuda.

Os métodos de ação sempre tem um argumento remetente, para que o seu método -buttonClick: deve ser declarada como este:

-(IBAction) buttonClick: (id)sender {
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top