16

ストーリーボードを使用して構築された UITextField があります。ユーザーがカーソルの位置を変更できないようにして、常にテキストの最後にテキストフィールドに入れておきたいです。

タッチダウン イベントでカーソルの位置を変更しようとしたのですが、テキスト フィールドを選択し、再度テキスト フィールドをタッチしてカーソルの位置を変更すると、位置が変更されます。

- (IBAction)amountBoxTouchDown:(id)sender {
    UITextPosition *start = [amountBox positionFromPosition:[amountBox beginningOfDocument] offset:amountBox.text.length];
    UITextPosition *end = [amountBox positionFromPosition:start
                                                   offset:0];
    [amountBox setSelectedTextRange:[amountBox textRangeFromPosition:start toPosition:end]];
}

誰かが解決策を知っていますか? ありがとう

4

7 に答える 7

31

UITextField のサブクラスを作成し、closestPositionToPointメソッドをオーバーライドするだけです。

- (UITextPosition *)closestPositionToPoint:(CGPoint)point{
    UITextPosition *beginning = self.beginningOfDocument;
    UITextPosition *end = [self positionFromPosition:beginning offset:self.text.length];
    return end;
}

ユーザーはカーソルを移動できなくなり、常にフィールドの最後になります。

迅速:

override func closestPosition(to point: CGPoint) -> UITextPosition? {
    let beginning = self.beginningOfDocument
    let end = self.position(from: beginning, offset: self.text?.count ?? 0)
    return end
}
于 2014-05-28T19:02:28.657 に答える
2

機能を実現するために組み合わせることができるツールとして、レイヤーとコントロールを考えてください。

UITextField の上に UIButton を配置し、ボタン タイプを Custom に変更するだけで、カーソルの移動、テキストの選択、コピー、切り取り、貼り付けなど、テキスト フィールドでのすべてのタッチ イベントを防ぐことができます。

デフォルトでは、カスタム ボタンは透明です。

ボタンがタッチされたときにテキスト フィールドがファーストレスポンダになるようにアクションを作成します。

于 2013-05-07T13:09:16.887 に答える
1

わかりました、あなたがしなければならないことは、非表示の UITextField を用意することです。

その非表示のテキスト フィールドをビューに追加し、becomeFirstResponder を呼び出します。あなたのamountBoxTouchDown:方法から。

Textfield デリゲートで、ユーザーが入力したテキストを取得して に追加しamountBox.textます。userInteractionEnabledまた、表示されている amountBox textFieldをオフにします。

これにより、あなたが望む効果が生まれます。

サンプルコードLinkを見てください。

于 2013-05-07T12:38:02.407 に答える