2017-02-16 3 views
1

私は結果を表示するためにクリアする3つのテキストフィールド、1つのボタンでプロジェクトやラベルを持っているのXcode 8とスウィフト3スウィフト:同時に

を使用している2つのFUNCテキストフィールドを使用する方法。私のクラスインサイド

私が持っているのViewController:

class ViewController: UIViewController,UITextFieldDelegate { 

@IBOutlet weak var input1: UITextField! 
@IBOutlet weak var input2: UITextField! 
@IBOutlet weak var input3: UITextField! 
@IBOutlet weak var lblResult: UILabel! 
@IBOutlet weak var clearButton: UIButton! 

が、私は最大3桁にも、私は両方のもののためにコードを取得するために管理し、使用している場合、彼らが働く360の値に私のテキストフィールドの入力を制限したいです一度に1つだけですが、どちらもfuncのテキストフィールドで始まるので、両方とも一緒に動作させることはできません。別のクラスでやる必要がありますか? これは基本的な質問ですが、学習プロセスの一部です。彼らはクラスのViewControllerの内側の両方である

func textField(_ textField: UITextField, 
       shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool 
{ 
    var startString = "" 
    if (textField.text != nil) 
    { 
     startString += textField.text! 
    } 
    startString += string 
    let limitNumber = Int(startString) 
    if limitNumber! > 360 
    { 
     return false 
    } 
    else 
    { 
     return true; 
    } 
} 

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool 
{ 
    let maxLength = 3 
    let currentString: NSString = textField.text! as NSString 
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString 
    return newString.length <= maxLength 
} 

と:

これらは私が結合したい2つのコードです。

ありがとうございました!

+0

このシナリオでは、どの「テキストフィールド」がどちらであるかを特定する必要はありません。これらの関数内のすべての変数はローカルです。これらは 'UITextFieldDelegate'の関数です。すべての 'UITextField'に対して' self'に設定していますか? – KrishnaCA

答えて

1

私は間違っていないよ場合は、ここにあなたが必要とするすべてである:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool { 
    let maxLength = 3 
    let limitValue = 360 

    let text = textField.text! 
    let currentString: NSString = text as NSString 
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString 

   var startString = "" 

    if !text.isEmpty { 
     startString += text 
    } 
    startString += string 

    let limitNumber = Int(startString)! 

    return limitNumber < limitValue && newString.length <= maxLength 
} 

アップデート:次texfield上

オートフォーカス。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
        replacementString string: String) -> Bool { 
    let maxLength = 3 
    let limitValue = 360 

    let text = textField.text! 
    let currentString: NSString = text as NSString 
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString 

   var startString = "" 

    if !text.isEmpty { 
     startString += text 
    } 
    startString += string 

    let limitNumber = Int(startString)! 

    let newLength: Int = newString.length 

    if textField == input1 { 
     if newLength == maxLength { 
      input2.becomeFirstResponder() 
     } 
    } 
    if textField == input2 { 
     if newLength == maxLength { 
      input3.becomeFirstResponder() 
     } 
    } 

    if textField == input3 { 
     if newLength == maxLength { 
      self.view.endEditing(true) 
     } 
    } 

    return limitNumber < limitValue && newLength <= maxLength 
} 
+0

それは魅力のように働いた! 本当にありがとうございました! – FONSPA

+0

あなたは歓迎です:) – javimuu

+0

Btwまた、3桁の数字を挿入したときに最初のテキストフィールドから2番目にカーソルを自動的に切り替える方法も知っていますか? ありがとう – FONSPA

1

あなたは、このような現在のtextFieldをチェックfunc textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Boolif statementを追加する必要があります。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    if textFiled == input1 { 
    // do logic for input1 
    } else if textFiled == input2 { 
    // do logic for input2 
    } 
} 
1

スウィフトswitch文はそれを行います。

func textField(_ textField: UITextField, 
       shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool 
{ 
    switch textField { 
    case input1: 
     // ... 
    case input2: 
     // ... 
    case input3: 
     // ... 
    default: 
     break 
    } 
} 
0

人々は質問を理解しませんでした。実際には、javimuuが述べたように、あなたのステートメントをマージするだけです。

javimuuのものが正しいので私の答えはひどいですが、無駄な方法でお互いを投票している人々を投票するのに十分な担当者がいないため、私はそれを書いています。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool 
{ 
    let maxLength = 3 
    let currentString: NSString = textField.text! as NSString 
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString 

    var startString = "" 
    if (textField.text != nil) 
    { 
     startString += textField.text! 
    } 
    startString += string 
    let limitNumber = Int(startString) 


    return newString.length <= maxLength && limitNumber! <= 360 
} 
+0

本当にありません。返品は同じではなく、FONSPAのニーズにより正確です。しかし、世界的には、はい、私は同意します。 – Acrasia

+0

私のビジネスではありません。これはFONSPAのコードから直接得られたものです。彼の機能が正しいかどうかをチェックするために単体テストを実行しなかった。私は彼の実際の質問に答えるだけです。 – Acrasia

+0

実際にはありません。返品は同じではなく、FONSPAのニーズにより正確です。しかし、グローバルにはい、私は同意する、それは – Acrasia

関連する問題