Utilisez ʻadjustTextPosition (byCharacterOffset: Int) `pour déplacer le curseur dans l'extension de clavier iOS. Documentation est parfait
To move the insertion point in the text input view, use the adjustTextPosition(byCharacterOffset:) method. For example, if you want to implement a forward delete action, move the insertion position forward by one character then delete backwards:
// Move the text insertion position forward 1 character (Avancer d'un caractère)
textDocumentProxy.adjustTextPosition(byCharacterOffset: 1)
Cela dit, mais c'est un ** piège **. Je pense que c'est difficile à remarquer, alors je vais le partager.
S'il est implémenté de cette manière, il se comportera comme ceci.
Cela fonctionne bien jusqu'à "aiueo", mais cela semble étrange au point d'atteindre les kanji et les pictogrammes.
Apparemment, cette méthode compte "un caractère" par le nombre de caractères lorsque ʻutf16 est utilisé. Vérifions donc les caractères dans le sens du déplacement avant de l'exécuter, puis ʻadjustTextPosition
.
func getActualOffset(count: Int)->Int{
if count>0{
if let after = textDocumentProxy.documentContextAfterInput{
if after == ""{
return 1 //S'il y a un saut de ligne avant un caractère, après==""Sera.
}
let left = after.prefix(count)
return left.utf16.count
}else{
return 1
}
}else if count<0{
if let before = textDocumentProxy.documentContextBeforeInput{
let right = before.suffix(-count)
return -right.utf16.count
}else{
return -1
}
}else{
return 0
}
}
let offset = getActualOffset(count: 1) //Obtenez le décalage exact
textDocumentProxy.adjustTextPosition(byCharacterOffset: offset) //Courir
Cela fonctionne comme prévu.
Soyez prudent car c'est un piège caché dans un endroit difficile à remarquer.
Recommended Posts