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

1voto

Nareshkumar Punkte 2281

Ein Protokoll bei der

- (IBAction) makeKeyboardGoAway

Funktion. Ich denke, diese Methode wird jedes Mal angewendet, wenn etwas auf dem Bildschirm angetippt wird. In diesem Fall müssen Sie das Berührungsereignis an das Textfeld senden. Ich bin mir nicht sicher, wie das gemacht wird, aber das sollte genügen. Else versuchen Sie entfernen, die kümmert sich um tippen (klicken) alle über die Ansicht und versuchen, zu tun, was Sie tun.

0 Stimmen

10x, perfekt....entfernt Bindung für alle Bildschirm und es funktioniert perfekt...jetzt denke ich, dass es nur die Tastatur oder etwas bedeckt....10x

1voto

Sascha Punkte 11

Wahrscheinlich liegt das Problem darin, dass Ihr tatsächlicher View-Controller in der laufenden Anwendung kein "basicViewController" ist, sondern ein UIViewController, der das UITextFieldDelegate-Protokoll nicht implementiert.

Was Sie im Interface Builder getan haben, indem Sie Ihre Klasse "basicViewController" als FilesOwner ausgewählt haben, ist einfach die Anmeldung das FilesOwner-Objekt in Ihrer laufenden Anwendung vom Typ basicViewController sein; das eigentliche Objekt ist pas durch diese Erklärung instanziiert wird und in Ihrem Fall nicht in der xib / nib enthalten ist.

Ein anderer Teil Ihres Codes instanziiert ein View-Controller-Objekt und lädt die xib / nib-Datei. Ich vermute, dass Ihr Code an dieser Stelle einen UIViewController instanziiert (typischerweise durch automatisch generierten Code) und nicht eine Instanz Ihres BasicViewControllers; Sie müssen einfach die Klasse dort ändern.

Außerdem tritt dieser Fehler häufig auf, wenn Sie einen UINavigationController oder UITabBarController im Interface Builder verwenden, der so konfiguriert ist (sein sollte), dass er andere benutzerdefinierte Ansichten instanziiert und lädt. Wenn Sie einen solchen übergeordneten Controller verwenden, überprüfen Sie, ob er tatsächlich so konfiguriert ist, dass er Ihren BasicViewController und nicht den UIViewController verwendet, wenn Sie Ihren View aus der xib / nib laden.

Ich hoffe, damit ist das Problem gelöst!

1voto

OhadM Punkte 4297

Sie können die Tastatur jederzeit ausblenden, wenn Sie nicht einmal wissen, in welcher Ansicht sich das Textfeld befindet, indem Sie es verwenden:

Objektiv-C:

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) 
                                           to:nil 
                                         from:nil 
                                     forEvent:nil];

Schnell:

UIApplication.sharedApplication().sendAction("resignFirstResponder", 
                                           to:nil, 
                                         from:nil, 
                                     forEvent:nil)

0voto

Bluely Punkte 1

Kannst du das mal versuchen

@interface ClassName : SuperClass < UITextFieldDelegate >

0 Stimmen

Dies ist nur der Fall, wenn Sie eine Delegatmethode überschreiben möchten..... es gibt keinen Grund, dies anders zu tun.

0voto

So verwenden...

textfield.delegate=self;

und verwenden Sie die UITextFieldDelegate in der Klasse .h

0 Stimmen

Ich hatte einen UICollectionViewController, der programmatisch UITextFields generierte und konnte nicht herausfinden, warum die Taste done nicht ausgelöst wurde. Dies hat den Trick gemacht.

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