削除できないテキストフィールドに '$'サインが必要です。ユーザーは、後に値を入力できる必要があります。バックスペースを押すと、入力した値のみが消去されます。プレフィックスをUITextFieldに追加する
なぜなら、UITextfieldのテキストが中央揃えであり、ユーザーが値を入力するときにどちらかに拡大するため、私はUILabelを使用できないのです。
任意の解決策最初に「$」のテキストフィールドのテキストを設定
削除できないテキストフィールドに '$'サインが必要です。ユーザーは、後に値を入力できる必要があります。バックスペースを押すと、入力した値のみが消去されます。プレフィックスをUITextFieldに追加する
なぜなら、UITextfieldのテキストが中央揃えであり、ユーザーが値を入力するときにどちらかに拡大するため、私はUILabelを使用できないのです。
任意の解決策最初に「$」のテキストフィールドのテキストを設定
-textField:shouldChangeCharactersInRange:replacementString:
を実装し、提案された変更が "$"を削除する場合はNO
を返します。また、「$」の後ろにカーソルを置くには、-textFieldDidBeginEditing:
を実装する必要があります。
デリゲートメソッドとしてtextFieldDidBeginEditing
内側前の回答Add a prefix to UITextField
で述べたように、私たちはプリ/ポスト通貨記号/コード
NSNumberFormatter* formatter = [[NSNumberFormatter alloc]init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setPaddingPosition:NSNumberFormatterPadAfterPrefix];
[formatter setCurrencySymbol:symbol];
[formatter setMaximumFractionDigits:2];
[formatter setMinimumFractionDigits:2];
[formatter setUsesGroupingSeparator:YES];
[formatter setCurrencyGroupingSeparator:@","];
[formatter setCurrencyDecimalSeparator:@"."];
を固定しているフォーマット文字列への最善かつ正しい方法であることを、次のコードを使用してい
使用する必要はありません。shouldChangeCharactersInRangeデリゲートメソッド。最も簡単で便利なソリューションは、あなたが値として金額を取るすべてのテキストフィールドにUITextField
のサブクラスを作成することができ、この
var label = UILabel(frame: CGRectMake(0, 0, 50, 50))
label.text = "$";
label.backgroundColor = UIColor(white: 0.0, alpha: 0.0)
tenantField.rightViewMode = .Always
tenantField.rightView = label
です。
class SpecialTextField: UITextField {
var amount: String {
get {
if self._amount.characters.count > 1 {
return (self._amount as NSString).substringFromIndex(2)
}
return ""
}
}
// MARK: - UITextField Observing
override internal func willMoveToSuperview(newSuperview: UIView!) {
if newSuperview != nil {
keyboardType = .DecimalPad
addTarget(self, action: #selector(SpecialTextField.didChangeText), forControlEvents: .EditingChanged)
}
}
override internal func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
return false
}
private var newVal: String = ""
private var _amount: String = ""
func didChangeText() {
if (text?.characters.count > 2) {
if text?.rangeOfString("$ ") == nil {
text = newVal
}
}
if (text?.characters.count == 1) && (text?.characters.count > newVal.characters.count) {
text = "$ " + text!
}
if (text?.characters.count == 2) && (text?.characters.count < newVal.characters.count) {
text = ""
}
newVal = text ?? ""
_amount = newVal
}
}
これは、最初の番号が入力されるたびに$
記号を挿入し、すべての数字が削除されるたびに、それを削除します。
var amount
は、$
記号を削除した後、ユーザーが入力した実際の金額を示します。
これが役に立った。
デリゲートメソッドを見ましたか?具体的には: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string' – CodaFi