Question

Je ne suis pas sûr pourquoi ce code ne fonctionnera pas. Lorsque je clique sur un bouton (l'action: ButtonClick) il doit changer les deux zones de texte (MyTextLabel et MyTextLabel2) texte valeur d'incrément « r » par un. Voici le code:

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
Était-ce utile?

La solution

Je sens quelque chose qui ne va pas avec la façon dont vous utilisez int r. Essayez de mettre static int r; en haut de la ligne de @interface dans MainView.h et ajouter, sous la ligne de - (IBAction)buttonclick;:

+(void) initialize;

Ensuite, retirez int r; de MainView.m. Puis, en MainView.m ajouter:

+(void) initialize {
   count = 0;
}

Autres conseils

Je vois deux problèmes:

  1. Vous ne pouvez pas déclarer int r où vous l'avez. Vous devez déclarer dans le bloc variable interface (où vous déclarez votre bouton et les étiquettes ou en dehors d'une méthode) ou dans la définition de la méthode.
  2. La ligne de r ++ ne se termine pas par un point-virgule.

Vous ne dites pas à votre question quoi, exactement, ne fonctionne pas comme vous l'attendez. Je pense va être que vos points de vente ne sont pas réellement connectés correctement. Vous pouvez ajouter une déclaration de journal à buttonClick comme ceci:

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

Le point étant, la plupart du temps, pour être sûr qu'il ne nil.

Dans Objective-C les noms des variables et les propriétés doivent commencer par une lettre minuscule pour se conformer au protocole de codage valeur-clé (KVC) (toujours myButton, jamais MyButton). La directive @synthesize repose sur ce pour générer les setters et getters. Ainsi, pour myButton de @synthesize va générer -(void)setMyButton:(UIButton *)button et -(UIButton *)myButton.

Alors, ne faites MyButton et ses collègues en minuscules et voir si elle aide.

méthodes d'action ont toujours un argument de l'expéditeur, de sorte que votre méthode -buttonClick: doit être déclarée comme ceci:

-(IBAction) buttonClick: (id)sender {
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top