Le délégué pour UITextField ne fonctionne pas ... Le bouton de retour ne répond pas
Je viens juste de commencer avec xcode et objective-c et fait un peu très de base des applications, mais ce que je vais avoir des problèmes avec, est très de base. le clavier bouton de retour, de ne pas cacher le clavier.
J'ai cherché sur internet pour la solution et tout ce qu'ils disent est de connecter délégué pour le propriétaire du fichier et ajoutez la fonction et cela devrait fonctionner, je l'ai fait et rien ne fonctionne.
J'ai un bouton ok et il est de travail et aussi en cliquant sur tout l'espace libre sur l'écran de travail, juste le bouton de retour....
Je suis en utilisant le simulateur, pas de test sur iphone encore. (xcode 3.2.5 64 bits avec la 4.2 simulateur).
C'est la ligne de code qui devrait relier le délégué à chaque textFiled.
1. j'ai déjà essayé de retourner les deux YES
et NO
, n'a pas fonctionné.
2. j'ai essayé les deux un nom d'objet spécifique pour le champ de texte et de cette manière générale, n'a pas fonctionné.
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return NO;
}
Dans la base: de-vue-contrôleur de connexion -> connexions -> points de vente, j'ai l': délégué -- Propriétaire du Fichier. et dans le propriétaire du fichier référencement des points de vente il y a: délégué - Ronde de style de texte.....
EDIT - j'ai oublié de mentionner, avant, j'ai vérifier et la méthode n'est pas appelée!!!
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
NSLog(@"Working!!!");
[textField resignFirstResponder];
return YES;
}
que dois-je faire pour y arriver? c'est pourquoi les gens disent de brancher le délégué, mais dans mon cas, il est connecté et pas de déclenchement de la fonction...je sais que c'est le genre de question stupide, mais pour un nobie comme moi la solution n'est pas évidente...
OK, une autre Édition - avec tout mon code: tout ne peut pas comprendre ce qu'il faut faire....
C'est: 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
C'est 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
Peut-être que maintenant je suis plus clair, désolé, je ne l'ai pas fait avant.
Quelqu'un a une idée de ce que je fais mal? il devrait être assez détroit vers l'avant.....
MODIFIER - Ajouter une image de tous les éléments, j'espère que cela va aider à m'aider 🙂
10x un lot pour chaque celui qui essaie de l'aider....j'aime vraiment ce cadre, il est si grand, après c++ et java, python et bien d'autres...et je travaille avec un livre, mais c'est pour ios 3.1, peut-être que c'est le problème.....
source d'informationauteur Erez | 2010-12-14
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous devez vérifier si
textFieldShouldReturn:
est en fait d'être appelé par l'ajout d'un NSLog déclaration ou un point d'arrêt au début de la méthode.Une fois que cela est hors de la voie, essayez un manuellement déclarer que votre vue-contrôleur est conforme à
<UITextFieldDelegate>
protocole dans votre fichier d'interface:@interface YourClass : ... <UITextFieldDelegate>
Également déclarer une propriété & prise de courant pour votre
UITextField
effectuer les connexions appropriées de l'IB et de déclarer manuellementself
comme leUITextField
délégué:self.yourUITextFieldObject.delegate = self;
Une fois que c'est fait, voir si la méthode ci-dessus est aujourd'hui appelé et assurez-vous de retourner OUI.
Il suffit d'écrire une seule ligne dans le
avant de retourner OUI;
la version finale sera comme ci-dessous:
Vous devez attribuer le délégué de la textfields à votre propriétaire du fichier. Les objets textfield envoyer le message, mais n'ont pas de délégué à y répondre.
Utiliser interface builder pour le faire.
Vous avez à mettre en œuvre cette méthode..
Comme Rog dit, n'oubliez pas d'enregistrer le champ texte pour le délégué, vous pouvez le faire manuellement comme il le dit, mais dans le Storyboard, vous pouvez simplement faites glisser le contrôle de tous vos objets textfield à la vue de contrôleur et d'inscrire les délégué (choisir délégué). Seuls les objets textfield sont enregistrées peuvent faire usage de toutes ces méthodes.
Si cette ligne est importante:
Ou même plus facile ces jours-ci est simplement utiliser la table de montage séquentiel:
mettre un journal à la
fonction. Je pense que cette méthode à chaque fois que quelque chose est tape sur l'écran. Dans ce cas, vous devrez envoyer le contact de l'événement dans le champ de texte. Vous ne savez pas comment cela se fait, mais ça devrait le faire.
Sinon essayer de retirer le qui prend soin de robinet(sur toute la vue et essayer de faire ce que vous faites.
Probablement le problème, c'est que votre vue-contrôleur à l'application en cours d'exécution n'est pas un "basicViewController" mais un UIViewController qui ne mettent pas en œuvre la UITextFieldDelegate-protocole.
Ce que vous avez fait dans interface builder en sélectionnant votre catégorie "basicViewController" comme le FilesOwner est juste déclarant la FilesOwner-objet dans votre application en cours d'exécution pour être de type basicViewController; l'objet réel est pas instancié par cette déclaration et dans votre cas, il n'est pas dans le xib /plume.
Une autre partie de votre code instancie une-vue-contrôleur de l'objet et des charges de la xib /plume de fichier. À cet endroit, je suppose que ton code est l'instanciation d'une classe UIViewController (typiquement par un code généré automatiquement) et non pas une instance de votre basicViewController; il vous suffit de changer la classe.
En outre, cette erreur se produit souvent lors de l'utilisation d'un UINavigationController ou UITabBarController dans Interface Builder qui est (devrait être) configuré pour instancier et de la charge d'autres vues personnalisées. Si vous utilisez un tel niveau supérieur contrôleur, double-vérifier qu'il est configuré pour l'utilisation de votre basicViewController, pas UIViewController lors du chargement de votre point de vue de la xib /plume.
De l'espoir, qui permet de résoudre le problème!
textfield est dans un sous-vue? dans ce cas, assurez-vous que textfield ont délégué la FileOwner.
Pouvez-vous essayer cette..
Utiliser comme ça...
et l'utilisation de la
UITextFieldDelegate
.la classe hVous pouvez toujours fermer le clavier quand vous ne savez même pas quel point de vue le champ de texte en utilisant:
Objective-C:
Swift:
J'ai eu le même problème. J'ai l'individu de la classe MyTextFieldDelegate seulement pour mon UITextFieldDelegate, qui s'étend UIViewController et UITextFieldDelegate. J'ai textFieldShouldReturn(...) et quelques autres funcs. Dans le ViewDidLoad(...) la fonction actuelle de ma UIViewController (par exemple, MyViewController), j'ai écrit:
Et il ne fonctionne pas pour moi. Mais quand j'ai déclaré myTextfieldDelegateLowLimit à l'échelle mondiale, il a travaillé.