Textfeld auf Inhalt prüfen

  • Textfeld auf Inhalt prüfen

    Hallo,

    nettes Forum. Hoffe Ihr könnt mir helfen.

    Ich suche eine Möglichkeit Textfelder auf ihren Inhalt zu prüfen bzw. zu prüfen ob ein Feld leer ist.

    Die Situation schaut so aus das ich drei Textfelder habe. Nach dem ausfüllen von zwei Feldern soll durch anklicken eines Buttons das dritte Feld berechnet werden.

    Jetzt ist es aber so das für die Berechnung festgestellt werden muss, welche beiden Felder ausgefüllt sind bzw. falls zu wenige bzw. zu viele Felder ausgefüllt sind soll die Berechnung nicht durchgeführt wird.


    Kann mir jemand dazu einen Tipp geben oder eventuell ein entsprechender Beispielcode würde mir schon reichen.

    Mich würde auch interessieren wie man den Inhalt eines Textfeldes dahingehend überprüfen kann ob nur Zahlen in ihn enthalten sind.


    Danke schon mal
    afro
  • Original von afroasiate
    Habe ein normales UITextField!!! @seb2

    Ups, nicht gesehen daß das hier ist. In dem Fall

    Quellcode

    1. @property(nonatomic, copy) NSString *text
    in Kombination mit NSNumberFormatter oder NSCharacterSet.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Wenn Du weißt daß in einem String eine valide Zahl drinsteht kannst Du auch stumpf mit intValue und floatValue arbeiten. Wobei selbst bei floatValue wieder die Kiste mit dem Dezimalseparator akut wird/ist. NSNumberFormatter ist tatsächlich Dein Freund.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Hallo,

    danke erstmal für die Zahlreichen Antworten. Da ich noch Anfänger bin komme ich
    mit der Umsetzung noch nicht so ganz klar.

    Um etwas genauer zu erklären was ich bis jetzt gemacht habe hier mein Code.
    Formatter.h

    Quellcode

    1. #import <Foundation/Foundation.h>
    2. @interface Formatter : NSFormatter {
    3. }
    4. - (NSString*)stringForObjectValue:(id)obj;
    5. - (BOOL)getObjectValue:(id*)obj forString:(NSString*)string errorDescription:(NSString**)error;
    6. - (bool)isPartialStringValid:(NSString*)partialString newEditingString:(NSString**) newString errorDescription:(NSString**)error;
    7. @end
    Alles anzeigen

    Formatter.m

    Quellcode

    1. #import "Formatter.h"
    2. @implementation Formatter
    3. - (NSString*)stringForObjectValue:(id)obj
    4. {
    5. return [obj description];
    6. }
    7. - (BOOL)getObjectValue:(id*)obj forString:(NSString*)string
    8. errorDescription:(NSString**)error
    9. {
    10. *obj = string;
    11. return YES;
    12. }
    13. -(bool)isPartialStringValid:(NSString*)partialString
    14. newEditingString:(NSString**) newString
    15. errorDescription:(NSString**)error
    16. {
    17. *newString = [partialString uppercaseString];
    18. return NO;
    19. }
    20. @end
    Alles anzeigen

    Des weiteren habe ich im MainViewController.h

    Quellcode

    1. #import <UIKit/UIKit.h>
    2. #import <Foundation/Foundation.h>
    3. @interface MainViewController : UIViewController {
    4. IBOutlet UITextField *textfeld;
    5. }
    6. - (IBAction)berechne;
    7. - (IBAction)reset;
    8. @end

    Und die MainViewController.m schau im wesentlichen so aus:

    Quellcode

    1. #import "MainViewController.h"
    2. #import "Formatter.h"
    3. @implementation MainViewController
    4. - (IBAction)berechne {
    5. }
    6. - (IBAction)reset {
    7. }
    8. - (BOOL)textFieldShouldReturn:(UITextField *)textField {
    9. [textField resignFirstResponder];
    10. return YES;
    11. }
    12. - (void)viewDidLoad {
    13. [super viewDidLoad];
    14. Formatter *zFormatter = [[Formatter alloc]init];
    15. [textfeld setFormatter:zFormatter];
    16. [zFormatter release];
    17. }
    18. @end
    Alles anzeigen


    Bekomme damit diese Warnung 'UITextField' may not respond to '-setFormatter:'

    Laut Beschreibung müsste jetzt jede Eingabe in das Textfeld in Groß-Buchstaben umgewandelt werden.

    Übernommen habe ich das ganz von:

    cocoa-coding.de/geoconverter_2/geoconverter_2.html

    Dadurch das ich ein UITextField und kein NSTextField habe komme scheinbar diese Warnung zustande.

    Liege ich jetzt mit meiner Vorgehensweise total Falsch oder bin ich auf dem richtigen Weg?

    Wäre über weitere Hilfen dankbar.

    cu
    afro
  • Also wenn ich das richtig verstanden willst du ja zwei Textfeld prüfen ob die lehr ist und es sollen nur Zahlen in die Felder. Da würde ich jetzt eigentlich spontan sagen nimm einfach in den Einstellungen im IB bei type vom Text Feld entweder Number Pad oder Number & Punctation dann gehen so oder so nur Nummern rein dann ganz einfach hiermit prüfen

    Quellcode

    1. if([textfield stringValue] != nil)
    2. {
    3. // Code für berechnung
    4. }


    Grüße Phillipp

    EDIT: hab kurz ne Fehler rausmachen müssen hatte ne klammer zu viel :D
  • Ja hast schon recht ursprünglich hatte ich was anderes vor mir ging es jetzt aber erst mal um das Verständnis. *g*

    Den NSNumberFormatter hab ich mir noch gar nicht angeschaut, bin im Moment etwas überfordert mit dem ganzen.

    Werde mir den NSNumberFormatter heute Abend noch mal anschauen.

    cu

    PS:

    Quellcode

    1. if([textfield stringValue] != nil)
    2. {
    3. // Code für berechnung
    4. }

    geht nicht "warning: 'UITextField' may not respond to '-stringValue'"
  • Jap haste recht das das net geht ja gut den NSNumberFormatter gibt es gar nicht aufem iPhone du kannst aber dem TextField nen typ zuweisen. Bin grad am testen mit so nem Mini Programm. Aber bei dem mit dem Typ vom TextField das iPhone hat ja den Vorteil wenn du festlegst welche Art von Tastatur kommen soll dann kann man nichts anderes eingeben :P die Doku war so lieb mir zu verraten wie das richtig heißt fürs UITextField und zwar [textfield text]


    Grüße Phillipp
  • Hi,

    um gleich noch eine dummy Frage hinterher zu werfen.

    Quellcode

    1. if ([textfeld text] != nil)


    Eine if Abfrage für ein Textfeld mit einem nil vergleich funktioniert auch nicht!?

    Wahrscheinlich komme ich ohne den NSFormatter nicht weiter.

    PS: Man kann zwar beim die Eingabe für ein Textfeld im Interface Builder auf Zahlen und Zeichen einstellen, es bleibt dennoch die Möglichkeit während der Eingabe die Tastatur auf A-Z umzuschalten.
  • Okay ich räum den Weg und lass die guten Leute ran jedenfals kommt bei soeiner

    Quellcode

    1. if([textfield1 text] == @"")
    2. {
    3. NSLog(@"Test");
    4. }
    5. else
    6. {
    7. NSLog(@"BLUB");
    8. }

    oder

    Quellcode

    1. if([textfield1 text] == nil)
    2. {
    3. NSLog(@"Test");
    4. }
    5. else
    6. {
    7. NSLog(@"BLUB");
    8. }


    kommt egal in welchem Zustand das TextField ist immer Blub raus was ich mir nicht erklären kann deswegen halt ich mich jetzt raus. Sorry.

    Grüße Phillipp
  • Mal generell:

    a)
    Man kann sich auf das verlassen, was dokumentiert ist. Irgendwas mal probieren, "aha, esklappt" usw. führt zu einer Frickelei die im besten Falle auf einem System stets funktioniert und erst bei einem System-Update in die Hose geht. Zwar gibt ein Text-Feld gerne nil zurück, wenn es leer ist (mir ist es anders noch nicht untergekommen), aber ich kenne keine Stelle der Dokumentation, die das verspricht. Auch @"" wäre ein zulässiger Rückgabewert. In diesem Falle ist der Text aber nicht nil.

    b) Man kann das jetzt so weiter frickeln und hoffen, irgendwann einen Treffer zu landen. Man kann aber auch versuchen, es so zu programmieren, wie es gedacht ist. Was willst? Du willst schauen, ob das Textfeld eine Zahl beinhaltet. Wieso machst du also nicht genau das, sondern vergleichst darauf, ob es "nichts" enthält? Das ist offenkundig etwas anderes. Und auch "nichts" und "kein Text" sind etwas anderes.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von pstMacDev
    Okay ich räum den Weg und lass die guten Leute ran jedenfals kommt bei soeiner

    Quellcode

    1. if([textfield1 text] == @"")
    2. {
    3. NSLog(@"Test");
    4. }
    5. else
    6. {
    7. NSLog(@"BLUB");
    8. }

    oder

    Quellcode

    1. if([textfield1 text] == nil)
    2. {
    3. NSLog(@"Test");
    4. }
    5. else
    6. {
    7. NSLog(@"BLUB");
    8. }


    kommt egal in welchem Zustand das TextField ist immer Blub raus was ich mir nicht erklären kann deswegen halt ich mich jetzt raus. Sorry.

    Grüße Phillipp

    Das ist gleich doppelt gefrickelt: Die erste Abfrage ermittelt, ob der zurückgegebene Wert "nichts" ist, nicht, ob kein Text eingegeben ist.

    Die zweite Abfrage überprüft eine Identität, keine Gleichheit. Sie ist dann wahr, wenn exakt diese Instanz @"" zurückgeliefert wird. Ob das das Textfeld macht oder sich selbst eine Instanz baut, steht ebenfalls in den Sternen.

    Lies:
    Negm-Awad, Objective-C und Cocoa I, 1./3. Auflage, S. 276 f., 284 f.

    Dem allen liegt aber der grundlegende Irrtum zurgrunde, man könne ein bisschen herumprogramieren, aha klappt ah, dann doch nicht usw. So funktioniert das nicht.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?