15 Stimmen

Delegate für UITextField funktioniert nicht...Return-Schaltfläche antwortet nicht

Ich habe gerade mit Xcode und Objective-C begonnen und tat einige sehr grundlegende Anwendungen, aber was ich bin mit Problem ist sehr grundlegend dies. die Tastatur-Return-Taste nicht Ausblenden der Tastatur.

Ich habe im Internet nach der Lösung gesucht und alles, was sie sagen, ist zu verbinden Delegat an den Eigentümer der Datei und fügen Sie die Funktion und es sollte funktionieren, ich tat, dass und nichts funktioniert.

Ich habe eine Ok-Taste, die funktioniert, und auch das Klicken auf eine freie Stelle auf dem Bildschirm funktioniert, nur die Return-Taste....

Ich verwende den Simulator, ich habe noch nicht mit dem iPhone getestet. (xcode 3.2.5 64 bit mit dem 4.2 Simulator).

Dies ist die Codezeile, die den Delegaten mit jedem textFiled verbinden soll. 1. Ich habe bereits versucht, beide zurückzugeben YES y NO hat nicht funktioniert. 2. Ich habe versucht, sowohl einen bestimmten Objektnamen für das textField und diese allgemeine Art und Weise, hat nicht funktioniert.

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return NO;
}

In der: grundlegende Ansicht-Controller-Verbindung -> Verbindungen -> Ausgänge, ich habe die: Delegate -- File's Owner. und in der Datei Eigentümer in referenzierenden Ausgänge gibt es: Delegate - Runde Stil text.....

EDIT - ich vergaß zu erwähnen, dass ich die Methode überprüft habe und sie nicht aufgerufen wird!!!

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
NSLog(@"Working!!!");
[textField resignFirstResponder];
return YES;

}

was sollte ich tun, damit es passiert? das ist, warum die Leute sagen, um den Delegaten zu verbinden, aber in meinem Fall ist es verbunden und nicht die Funktion auslösen... ich weiß, es ist Art von dumme Frage, aber für einen Nobie wie mich die Lösung ist nicht offensichtlich...

OK, noch ein Edit - mit meinem ganzen Code: ich kann einfach nicht verstehen, was ich tun soll.... Dies ist: basicViewController.h :

#import <UIKit/UIKit.h>

@interface basicViewController : <#superclass#> <UITextFieldDelegate>

@interface basicViewController : UIViewController <UITextFieldDelegate> {
//every object that we want to interact with (like text field or lable) is call an   outlet!!!!
//here we define the outlets for our program
IBOutlet UITextField *txtName;
IBOutlet UILabel *lblMessage;
 }

//here are the getters and setter for our outlets
@property (nonatomic, retain) IBOutlet UITextField *txtName;
@property (nonatomic, retain) IBOutlet UILabel *lblMessage;

//method decleration for the OK button action
- (IBAction) doSomething;

//method for hiding the keyboard when clicking on empty area in the app
   //we will put an invisible button on all area and clicking on it will make keyboard disapear
   - (IBAction) makeKeyboardGoAway;

   @end

Dies ist basicViewController.m :

 #import "basicViewController.h"

 @implementation basicViewController

 //synthesizeing the objects that we made' this will create the getter and setters automaticly
 @synthesize txtName;
 @synthesize lblMessage;

 - (IBAction) doSomething{
// makeing keyboard disapear when pressing ok button (doing that form the text field)
//when pressing the OK button, the keyboard will disapear and when clicking in the text field it will show again
[txtName resignFirstResponder];

NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@",txtName.text];

//the objective-c way for setting the test in the text field
[lblMessage setText:msg];   
//the regular object oriented way
//lblMessage.text = msg;
[msg  release];
 }    

 - (IBAction) makeKeyboardGoAway{
[txtName resignFirstResponder];
 } 

 //when clicking the return button in the keybaord
 - (BOOL)textFieldShouldReturn:(UITextField *)textField{
NSLog(@"Working!!!");
[textField resignFirstResponder];
return YES;
 }

 - (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
 }

 - (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
 }

 - (void)dealloc {
     [super dealloc];
 }

 @end

Vielleicht bin ich jetzt klarer, tut mir leid, dass ich es vorher nicht getan habe. Hat jemand eine Idee, was ich falsch mache? es sollte ziemlich gerade vorwärts sein.....

EDIT - Ich füge ein Bild von allen Elementen hinzu, ich hoffe, das hilft mir weiter :-) alt text

10x vielmals für jeden, der versucht zu helfen....i mag dieses Framework wirklich, es ist so toll nach c++ und java, python und vielen anderen...und ich arbeite mit einem Buch, aber es ist für ios 3.1, vielleicht ist das das Problem.....

1 Stimmen

Verwenden Sie wirklich ein Textfeld? Überprüfen Sie es erneut, es könnte UITextView sein.

0 Stimmen

Wenn die Methode nicht aufgerufen wird, sollten Sie die Schritte in meiner Antwort unten befolgen, die Ihnen weiterhelfen sollten.

0 Stimmen

Ok, ich versuche dies jetzt, aber ich dachte, Sie sagten, dass es aufgerufen werden muss, bevor das andere Zeug....i'll beck mit JA oder NEIN (objektiv-c-Stil) bald....LOL

32voto

Rog Punkte 18402

Erstens sollten Sie prüfen, ob textFieldShouldReturn: tatsächlich aufgerufen wird, indem Sie eine NSLog-Anweisung oder einen Haltepunkt am Anfang der Methode hinzufügen.

Sobald das aus dem Weg geräumt ist, versuchen Sie manuell zu deklarieren, dass Ihr View-Controller konform ist mit <UITextFieldDelegate> Protokoll in Ihrer Schnittstellendatei:

@interface YourClass : ... <UITextFieldDelegate>

Melden Sie auch eine Immobilie und eine Verkaufsstelle für Ihr UITextField , stellen Sie die entsprechenden Verbindungen in IB her und deklarieren Sie manuell self als die UITextField delegieren mit:

self.yourUITextFieldObject.delegate = self;

Sobald dies geschehen ist, überprüfen Sie, ob Ihre obige Methode jetzt aufgerufen wird, und stellen Sie sicher, dass Sie YES zurückgeben.

0 Stimmen

Ich hatte die Anweisung "self.yourUITextFieldObject.delegate = self;" übersehen. Endlich ist das Problem gelöst! Danke und +1.

0 Stimmen

Danke @Rog self.yourUITextFieldObject.delegate = self; diese Codezeile hat mein Problem gelöst.

6voto

user1229932 Punkte 61

Schreiben Sie einfach eine Zeile in die

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
}

bevor Sie YES zurückgeben; Die endgültige Version wird wie folgt aussehen:

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
}

-(void)textFieldDidEndEditing:(UITextField *)textField{

    NSLog(@"%@",textField.text);
}

3voto

fofo Punkte 31

Sie müssen den Delegaten der Textfelder Ihrem Dateieigentümer zuweisen. Die Textfelder senden die Nachricht, haben aber keinen Delegierten, der darauf antwortet.

Verwenden Sie dazu den Interface Builder. Sie müssen diese Methode implementieren..

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
  [textField resignFirstResponder];
  return YES;
}

0 Stimmen

Richtig. Sie müssen nur sicher sein, dass Sie den Dateibesitzer als Textfelddelegierten festgelegt haben. Andernfalls wird das Textfeld die Rückmeldung senden, aber niemand wird darauf antworten. Sie können den Delegaten mit dem Interface Builder einstellen.

2voto

Jordy Punkte 1714

Wie Rog sagte, vergessen Sie nicht, das Textfeld auf den Delegaten zu registrieren, können Sie dies manuell tun, wie er sagte, aber in Storyboard können Sie nur Control Drag von allen Ihren Textfeldern auf den View-Controller und registrieren Sie den Delegaten (wählen Sie Delegaten). Nur die Textfelder, die registriert sind, können all diese Methoden nutzen.

Diese Zeile ist also wichtig:

self.yourUITextFieldObject.delegate = self;

Noch einfacher ist es heutzutage, einfach das Storyboard zu verwenden:

enter image description here

0 Stimmen

Ich habe versehentlich automatisch vervollständigt zu UITextViewDelegate statt UITextFieldDelegate . Wissend, dass ich "hinzugefügt" hatte UITextFieldDelegate Ich habe lange Zeit nicht gesucht.

2voto

doxsi Punkte 972

Textfield ist in einer Unteransicht? in diesem Fall, stellen Sie sicher, textfield haben als Delegaten die FileOwner.

0 Stimmen

Großartig... das ist die Antwort, die ich gesucht habe...!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X