2012-03-18 8 views
2

削除できないテキストフィールドに '$'サインが必要です。ユーザーは、後に値を入力できる必要があります。バックスペースを押すと、入力した値のみが消去されます。プレフィックスをUITextFieldに追加する

なぜなら、UITextfieldのテキストが中央揃えであり、ユーザーが値を入力するときにどちらかに拡大するため、私はUILabelを使用できないのです。

任意の解決策最初に「$」のテキストフィールドのテキストを設定

+0

デリゲートメソッドを見ましたか?具体的には: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string' – CodaFi

答えて

8
  1. を提供してください。
  2. テキストフィールドの代理人をあなたのオブジェクト(おそらくそれを含むビューコントローラ)に設定します。
  3. -textField:shouldChangeCharactersInRange:replacementString:を実装し、提案された変更が "$"を削除する場合はNOを返します。

また、「$」の後ろにカーソルを置くには、-textFieldDidBeginEditing:を実装する必要があります。

0

デリゲートメソッドとして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:@"."]; 
を固定しているフォーマット文字列への最善かつ正しい方法であることを、次のコードを使用してい
1

使用する必要はありません。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 
0

です。

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は、$記号を削除した後、ユーザーが入力した実際の金額を示します。

これが役に立った。

関連する問題