IPhoneアプリに編集可能なUITextViewがあります。
ユーザーが特定の機能を選択するたびに、UITextView内に新しいボタンが作成されます。
ボタンは常にテキストビューの左側に配置されるため、ユーザーが入力内容を確認できるように、ボタンの右側にカーソルを配置する必要があります。カーソルの位置を設定するための文書化された(または文書化されていない)メソッドを見つけることができないようです。
誰もアイデアを持っていますか、または他の誰かが同様のものを達成しましたか?
私はこれが非常に遅いことを知っていますが、私がこれに引っかかっている人を助けることができると思いました(私のように)。
performSelector:withObject:afterDelay
はうまく機能しているようです(他の答えは、何らかの奇妙な理由で機能しません):
- (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);
}
ソース: http://puppenspieler.tumblr.com/post/757819650/set-selectedrange-in-a-uitextview
textView.editable = YES;
textView.selectedRange = NSMakeRange(2, 0);
SelectedRangeを長さ0の場所に設定し、おそらくtextViewも編集可能にする必要があるため、それもYESに設定します。
次のようなものを試してください:
dispatch_async(dispatch_get_main_queue(), ^{
inView.selectedRange = NSMakeRange(3, 0);
});
これにより、次のランループの開始時に、選択された範囲がメインスレッドで実行されます。
Swift 4を使用して、次を使用してtextViewの先頭に移動します。
DispatchQueue.main.async {
self.selectedTextRange = self.textRange(from: self.beginningOfDocument, to: self.beginningOfDocument)
}
textViewのselectedRange
を変更します。たとえば、カーソルを位置3に配置するには:
[textView setSelectedRange:NSMakeRange(3, 0)];
あなたの場合、textViewの内容にスペースを追加すると役立つ場合があります。そしてオブザーバーtextview 's textDidChanged event
これらのスペースを防ぐために、ユーザーによって削除されます。
Texviewプレースホルダーを作成する場合は、私のように必須またはオプションです。ハックを見る
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//
}
}
デリゲートを登録することを忘れないでください:UITextViewDelegate