J'ai une UITextView dans mon application iPhone qui est modifiable.
Un nouveau bouton est créé dans UITextView chaque fois que l'utilisateur sélectionne une fonction spécifique.
Comme le bouton est toujours placé à gauche dans la vue texte, je dois positionner le curseur sur le côté droit du bouton afin que l'utilisateur puisse voir ce qu'il tape .. (ou non documentée) pour définir l'emplacement du curseur.
Quelqu'un a-t-il des idées ou quelqu'un d'autre a-t-il réalisé quelque chose de similaire?
Je sais que c'est très tard, mais je pensais pouvoir aider les gens coincés dans cette affaire (comme moi).
Le performSelector:withObject:afterDelay
semble bien fonctionner (les autres réponses ne fonctionneraient tout simplement pas pour une raison étrange):
- (void)textViewDidBeginEditing:(UITextView *)inView
{
[self performSelector:@selector(setCursorToBeginning:) withObject:inView afterDelay:0.01];
}
- (void)setCursorToBeginning:(UITextView *)inView
{
//you can change first parameter in NSMakeRange to wherever you want the cursor to move
inView.selectedRange = NSMakeRange(3, 0);
}
source: http://puppenspieler.tumblr.com/post/757819650/set-selectedrange-in-a-uitextview
textView.editable = YES;
textView.selectedRange = NSMakeRange(2, 0);
Définissez selectedRange sur un emplacement de longueur 0 et vous souhaiterez probablement aussi que textView soit éditable; définissez-le également sur YES.
Essayez quelque chose comme ça:
dispatch_async(dispatch_get_main_queue(), ^{
inView.selectedRange = NSMakeRange(3, 0);
});
Cela fera que selectedRange sera exécuté sur le thread principal au début du prochain cycle d'exécution.
J'utilise ce qui suit pour aller au début de textView en utilisant Swift 4 :
DispatchQueue.main.async {
self.selectedTextRange = self.textRange(from: self.beginningOfDocument, to: self.beginningOfDocument)
}
Si vous voulez que Textview, l’espace réservé soit obligatoire ou facultatif, comme moi. Voir mon hack
func textViewDidBeginEditing(textView: UITextView) {
if textView.text.isEmpty {
if self.text == "Required" || self.text == "Optional" {
dispatch_async(dispatch_get_main_queue(), {
textView.selectedRange = NSMakeRange(0, 0)
});
}
}
}
func textViewDidEndEditing(textView: UITextView) {
if CommonUtils.isEmptyString(textView.text) {
if required {
textView.text = "Required"
} else {
textView.text = "Optional"
}
textView.textColor = grayColor//
}
}
func textViewDidChange(textView: UITextView) {
if textView.text.isEmpty {
if required {
textView.text = "Required"
} else {
textView.text = "Optional"
}
textView.textColor = grayColor
textView.selectedRange = NSMakeRange(0, 0)
} else {
if required {
if textView.text.length > "Required".length {
textView.text = self.text.replace("Required", withString: "")
}
} else {
if textView.text.length > "Optional".length {
textView.text = self.text.replace("Optional", withString: "")
}
}
textView.textColor = blackColor//
}
}
N'oubliez pas d'inscrire un délégué: UITextViewDelegate