Méthodes de délégué UITextView

J'essaye d'get des methods de délégué pour travailler avec UITextView, mais cela ne fonctionne pas pour une raison quelconque.

J'ai déclaré dans mon viewController.h que c'est un UITextViewDelegate

J'essaye d'get le code suivant pour effacer le code par défaut "TEXT" quand j'appuie sur le textView.

- (void)textViewDidBeginEditing:(UITextView *)textView { if (myTextView.text == @"TEXT") { [myTextView setText:@""]; } NSLog(@"did begin editing"); } 

Je m'attendais à effacer le text et à voir l'printing NSLog quand je tape sur le text et que le keyboard apparaît. Rien du tout n'arrive


À l'aide d'une vue de text, car je dois resize la vue en fonction de la taille de son contenu et que textView possède une propriété contentSize, whit label et textField ne le font pas.

METTRE À JOUR:

J'aurais dû utiliser:

 if ([myTextView.text isEqualToSsortingng:@"TEXT"]) { [myTextView setText:@""]; } 

voici le projet si vous voulez jeter un coup d'oeil.

cette méthode est manquante dans votre file Test2ViewController.m :

 - (void)viewDidLoad { [myTextView setDelegate:self]; } 

Vous pouvez également connecter le délégué dans Interface Builder , si vous préférez mieux.

MISE À JOUR # 1:

ajoutez cette méthode à votre class pour contrôler la key de return .

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSSsortingng *)text { if ([text isEqualToSsortingng:@"\n"]) { NSLog(@"Return pressed, do whatever you like here"); return NO; // or true, whetever you's like } return YES; } 

Connectez le délégué de TextView dans Interface Builder à la class parente. J'aime utiliser la connection dans IB plutôt que de la coder. Pour moi, le less de code pour regarder le mieux :). Aussi – ne comparez pas les strings de cette façon. Utilisez isEqualToSsortingng pour la comparaison de strings:

 if ([myTextView.text isEqualToSsortingng:@"TEXT"]) { [myTextView setText:@""]; } 

Connexion Pic

Voici le projet fixe:

Votre UITextview doit être dit où se trouvent ses methods de délégué …

Si vous l'ajoutez via un constructor d'interface, connectez simplement les delegates

ou si via le code

 [yourTextViewOutlet setDelegate:self]; 

Je pense avoir une bonne solution de principe:

Définissez le délégué UITextView à self, puis créez votre propre délégué, en réutilisant le même nom. Cela vous permet d'intercepter le délégué sans rien de différent de l'extérieur

 @interface TTGTextView : UITextView<UITextViewDelegate>// UIPlaceHolderTextView @property(nonatomic, assign) id<UITextViewDelegate> delegate; @synthesize delegate = realDelegate; 

Alors allez-y et interceptez les methods. Notez que vous devez les couvrir tous, sinon ils ne réagiront pas au "vrai" délégué

 -(void)textViewDidBeginEditing:(UITextView *)textView { if ([realDelegate respondsToSelector:@selector(textViewDidBeginEditing:)]) [realDelegate textViewDidBeginEditing:textView]; /*YOUR CODE HERE*/ } -(void)textViewDidChange:(UITextView *)textView { if ([realDelegate respondsToSelector:@selector(textViewDidChange:)]) [realDelegate textViewDidChange:textView]; /*YOUR CODE HERE*/ } -(void)textViewDidChangeSelection:(UITextView *)textView { if ([realDelegate respondsToSelector:@selector(textViewDidChangeSelection:)]) [realDelegate textViewDidChangeSelection:textView]; /*YOUR CODE HERE*/ } -(void)textViewDidEndEditing:(UITextView *)textView { if ([realDelegate respondsToSelector:@selector(textViewDidEndEditing:)]) [realDelegate textViewDidEndEditing:textView]; /*YOUR CODE HERE*/ } - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSSsortingng *)text { if ([realDelegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementText:)]) return [realDelegate textView:self shouldChangeTextInRange:range replacementText:text]; return YES; } -(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange { if ([realDelegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:)]) return [realDelegate textView:self shouldInteractWithURL:URL inRange:characterRange]; return YES; } - (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)range { if ([realDelegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:)]) return [realDelegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:range]; return YES; } 

Certaines methods se triggersnt correctement, d'autres ne tournent pas pour moi mais apparaissent immédiatement pour le "vrai" délégué. Mais c'est un sharepoint départ. Je suppose qu'une manière plus solide et plus générale serait de faire une sorte de multiplexeur – faites-en un UITableViewDelegate qui contient un tableau de delegates.

Déponds sur votre vue. Si vous utilisez TextField, vous devriez utiliser UITextFieldDelegate dans le file .header en tant que délégué, comme ci-dessous.

 @interface ExamPageViewController : UIViewController <UITextFieldDelegate> 

et que nous pouvons utiliser les methods UITextFieldDelegate. Tu peux voir;

 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [self.questionAnswerTextField resignFirstResponder]; return YES; } -(void)textFieldDidBeginEditing:(UITextField *)textField { if ([textField.text isEqualToSsortingng:@"Sorunun cevabını buraya yazınız!"]) { textField.text = @""; } } - (void)textFieldDidEndEditing:(UITextField *)textField { if ([textField.text isEqualToSsortingng:@""]) { textField.text = @"Sorunun cevabını buraya yazınız!"; } } 

Sinon, vous devriez utiliser UITextViewDelegate en tant que délégué comme ci-dessous extrait de code.

 @interface ExamPageViewController : UIViewController <UITextViewDelegate> 

et que nous pouvons être utilisés ces methods de délégué dans le file .m

 - (BOOL)textViewShouldReturn:(UITextView *)textField { [self.questionAnswerTextField resignFirstResponder]; return YES; } -(void)textViewDidBeginEditing:(UITextView *)textField { if ([textField.text isEqualToSsortingng:@"Sorunun cevabını buraya yazınız!"]) { textField.text = @""; } } - (void)textViewDidEndEditing:(UITextView *)textField { if ([textField.text isEqualToSsortingng:@""]) { textField.text = @"Sorunun cevabını buraya yazınız!"; } }