UITableView にいくつかの UITextFields があります。ユーザーは、数字とドットのみを挿入できる必要があります。これを行うには、キーボードの種類を UIKeyboardTypeNumberPad に設定し、左下隅に「.」ボタンを追加しました。ボタンが押されるたびに、関数が呼び出されます。この関数は現在のカーソル位置にドットを挿入する必要がありますが、これが問題です: UITextField には selectedRange プロパティがないため、現在のカーソル位置を取得できません。誰かがこの問題を解決する方法を知っていますか、またはこれを行う他の方法はありますか? ありがとう。
6 に答える
私はついにこの問題の解決策を見つけました!挿入するテキストをシステム ペーストボードに配置し、現在のカーソル位置に貼り付けることができます。
[myTextField paste:self]
この人のブログで解決策を見つけました:
http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html
貼り付け機能は OS V3.0 固有のものですが、テストしたところ、カスタム キーボードで問題なく動作します。
更新:以下の Jasarien のコメントによると、最初にペーストボードの内容を保存し、後で復元することをお勧めします。便宜上、ここに私のコードがあります:
// Get a reference to the system pasteboard
UIPasteboard* lPasteBoard = [UIPasteboard generalPasteboard];
// Save the current pasteboard contents so we can restore them later
NSArray* lPasteBoardItems = [lPasteBoard.items copy];
// Update the system pasteboard with my string
lPasteBoard.string = @"-";
// Paste the pasteboard contents at current cursor location
[myUIField paste:self];
// Restore original pasteboard contents
lPasteBoard.items = lPasteBoardItems;
[lPasteBoardItems release];
- (void)insertText:(NSString *)text
iOS 3.2 以降で利用できます。
現在、小数点を含む素晴らしいテンキー タイプのキーボードがあります。次のように、UITextField
のkeyboardType
プロパティをに設定する (IB にはありません。まだオプションではありません) 以外の構成は必要ありません。UIKeyboardStyleDecimalPad
textField.keyboardType = UIKeyboardTypeDecimalPad;
これにより、これまでやろうとしていた凝った作業がすべて自動的に行われます。
小数点以下の桁数を入力できるテキストフィールドを作成する場合は、小数点を特定の精度に固定し、ユーザーが次のように数値を入力できるようにすることをお勧めします。
精度が小数点以下2桁であると仮定します。
start: value is 0.00
user enters 1: value is 0.01
user enters 2: value is 0.12
user enters 3: value is 1.23
user enters 4: value is 12.34
小数点付きの数値を入力するための最良の方法は何ですか?を参照してください。通貨の同様のソリューション。
これは、カスタムキーボードを作成し、そのアプローチが提示するすべてのニュアンスを処理するよりもはるかに単純なソリューションです。ただし、可変長の精度が必要な場合は、そのアプローチの方が適している可能性があります。
ボタンが押されたときに、テキスト フィールドの値を文字列として読み取ります。文字列を編集し、フィールドの値を新しい文字列に設定します。