2

Je travaille sur un projet de type média social et je fais face à un problème sérieux.Remplacer UITextField getter-setter

Ce projet est sur iTunes à partir de 2 ans, tant de données utilisateur sont déjà dans la base de données du serveur. Maintenant, notre client dit que la première lettre de chaque texte de TextFiled doit être majuscule. Je peux aborder la nouvelle entrée d'utilisateur avec la ligne ci-dessous dans la catégorie UItextfiled.

self.autocapitalizationType = UITextAutocapitalizationTypeWords; 

Mais qu'en est-il des données existantes? Les données que je montre dans le champ de texte lorsque l'utilisateur existant ira pour l'édition.

J'ai une catégorie appliquée dans le texte UItextField pour la couleur et la consistance de la police, mais comment puis-je surcharger la méthode de réglage UItextFiled?

Ou me suggérer d'une autre manière. Parce qu'il y a plus de cent textfileds, comment puis-je m'y attaquer? Il y a beaucoup de classes plutôt que d'écrire du code pour chaque classe quelle sera la meilleure solution? J'ai écrit ce code dans UItextField + CustomText catégorie.

- (void)setText:(NSString *)str {  

    //str= uppercase code 
    //self.text=str;  //this is recursive fn call 
} 

Ce compositeur est appelé à chaque fois que je suis à tout texte assigne une textfield (TextField.text), mais comment cette modification str Assignez à ce champ de texte spécifique.

Répondre

0

Vous devez modifier le texte par cette méthode en mettant à jour la valeur str que:

simplement appeler cette méthode:

[self setText:@"ENTER TEXT"]; 

Ce qu'il fait est qu'il appellera la méthode & str sera mis à jour nouvelle chaîne & qui sera à nouveau affectée à textField.

J'espère que c'est ce que vous cherchez.

+0

Je suis PRÉPONDÉRANTS compositeur et ce [auto setText: @ « txt »] va appeler lui-même à nouveau et encore. –

+0

@utkalpatel pourquoi cela s'appellera encore et encore? alors que vous définissez la valeur une seule fois – Mayur

+0

J'ai écrit cette méthode dans la catégorie UItextfiled + custom.So quand n'importe où quand j'ai écrit textfieldfield.texte alors cette méthode appellera et str aura une valeur comme 'australie' maintenant je le ferai 'Australie' mais quand j'écrirai [self setText: str] alors il s'appellera self car j'ai le setter override. –

1

Peut-être que vous pouvez utiliser pour changer la cible:

[textField addTarget:self 
      action:@selector(textFieldDidChange:) 
forControlEvents:UIControlEventEditingChanged]; 

mieux sera mis en textfield autocapitalizationType

self.textfield.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters; 
1

Vous devez définir iVar directement lors de l'utilisation setter personnalisé. Autrement, il s'agira d'une pile infinie récursive, identique à votre code. qui suivent devraient être bien dans votre cas

- (void)setText:(NSString *)str {  
    strUpperCase= uppercase code 
    _str = strUpperCase;// or str = strUpperCase; // One of this 
} 
1

Il suffit d'appeler les méthodes de la super dans vos remplacements:

- (NSString *)text 
{  
    // do your extra stuff here 
    // ... 

    return [super text]; 
} 

- (void)setText:(NSString *)text 
{ 
    [super setText:text]; 

    // do your extra stuff here 
    // ... 
}