Frage

Ich bin nicht sicher, warum dieser Code wird nicht funktionieren. Wenn ich auf eine Schaltfläche klicken (Aktion: Button) sollte es die beiden Textfelder ändern (MyTextLabel und MyTextLabel2) Text Inkrementwert ‚r‘ um eins. Hier ist der 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
War es hilfreich?

Lösung

Ich habe das Gefühl, etwas mit der Art und Weise falsch sind Sie int r verwenden. Versuchen Sie static int r; an der Spitze der @interface Linie in MainView.h setzen und auch hinzufügen, unter der - (IBAction)buttonclick; Zeile:

+(void) initialize;

Dann entfernen int r; von MainView.m. Dann in MainView.m hinzufügen:

+(void) initialize {
   count = 0;
}

Andere Tipps

Ich sehe zwei Probleme:

  1. Sie können nicht int r erklären, wo Sie es haben. Sie sollten es in Ihrer Schnittstelle Variablen Block deklarieren oder in der Methodendefinition (wo Sie Ihre Schaltfläche und Etiketten oder außerhalb einer Methode deklarieren).
  2. Die Zeile mit r ++ ist nicht mit einem Semikolon beendet.

Sie sagen nicht in Frage, was genau ist die Art und Weise funktioniert nicht Sie es erwarten. Meine Vermutung wird sein, dass Ihre Ausgänge sind nicht wirklich richtig angeschlossen ist. Vielleicht möchten Sie eine Log-Anweisung hinzuzufügen, wie dies buttonClick:

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

Der Punkt ist, vor allem, um sicherzustellen, dass es nicht nil.

In Objective-C die Namen von Variablen und Eigenschaften müssen mit einem Kleinbuchstaben beginnen mit dem Schlüsselwert Coding (KVC) Protokoll (immer myButton, nie MyButton) zu entsprechen. Die @synthesize Richtlinie stützt sich auf diese die Getter und Setter zu generieren. So kann myButton @synthesize generiert -(void)setMyButton:(UIButton *)button und -(UIButton *)myButton.

Also, macht MyButton und seine Kollegen klein geschrieben und sehen, ob es hilft.

Aktion Methoden immer einen Absender Argument haben, so dass Ihre -buttonClick: Methode sollte wie folgt deklariert werden:

-(IBAction) buttonClick: (id)sender {
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top