2016-03-30 22 views
0

私は開発が初めてで、最新のSwiftを使ってテキストフィールドに入力できる文字数を制限しようとしています。私はいくつかの異なるチュートリアルに従おうとしましたが、サイト上でいくつかの異なる答えをチェックしましたが、私は多くの運がありません。UITextFieldでの文字の制限? - Swift/Xcode

現在、私はこの私の迅速なファイルに入力されています:

@IBAction func InfoTextFieldLimit(sender: UITextField) { 

     self.InfoTextField.delegate = self 

     func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

      let currentCharacterCount = textField.text?.characters.count ?? 0 
      if (range.length + range.location > currentCharacterCount) { 

       return false 
      } 

      let newLength = currentCharacterCount + string.characters.count - range.length 
      return newLength <= 10 
     } 
    } 

...私はすべてのエラーを得ていないんだけど、私はアプリを実行したときに何が起こっているように見えるん。

私は他にも少なくとも3つの方法を試してみましたが、コピーを気にしませんでした。 (しかし、要望に応じて提供することができます)

誰かが私が間違っていることを教えてもらえますか?大変感謝していますか? ...私は、明白な何かが見逃される可能性が高いと感じています。

私はまた、道路の下のテキストビューでこれをやりたいと思います。どのように違うのでしょうか?

+0

UITextFieldのデリゲートを設定していることを確認してくださいは、他の場所であなたの質問へのリンクです:http://stackoverflow.com/questions/433337/set-the -max-character-length-of-a-uitextfield?rq = 1 – Nshweky

+0

私は問題が正しくデリゲートを設定しなかったと思います。どのようなIBActionメソッドが使用されていますか? viewDidLoadのテキストフィールドデリゲートに "self"を設定することができます。 – Surely

答えて

0

私はもともとObjective-Cでこのコードを持っていた:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 4) ? NO : YES; 
} 

私は迅速に変換しようとした、あなたはUITextFieldDelegateメソッドを使用する必要があります...それが動作するかどうか私に知らせてください。また

func textField(textField:UITextField,shouldChangeCharactersInRange range:NSRange,replacementString string:NSString)->Bool{ 
var newLength:NSUInteger = textField.text.length + string.length - range.length 

return null(newLength > 4)?false:true 

} 
+0

私は実際にこれもどちらも運がありませんでしたが、もう少し試行錯誤して私の質問に投稿した元のコードを手に入れることができました。私は間違って設定された私の代理人メソッドを持っていたと思う..しかし、今私は別の小さな問題が発生しました。私はviewcontrollerに3つの異なるテキストフィールドを持っています。私はamtを制限したいだけです。私は「if(textfield == MyTextField){」の後に「Bool {」の後にしようとしましたが、今はスタックされています。どうすればこれを達成できますか? ...助けてくれてありがとう! – aspenfox

+0

申し訳ありませんが、私はあなたが言っていることを理解しているか分かりません... 2つのテキストフィールドの比較はうまくいかなかったのですか? – Nshweky

0
func textField(textField: UITextField, shouldChangeCharactersInRange range:  NSRange, replacementString string: String) -> Bool { 
    let maxLength = 50 
    guard let text = textField.text else { return true }  
    let newLength = text.characters.count + string.characters.count - range.length 
    return newLength <= maxLength 
} 

あなたはここでUIViewController

+0

これは、テキストフィールドが1つしかない場合に便利ですが、そのうちの1つを制限する5つのテキストフィールドがありますので、どうすればよいですか?私を助けてください –