自動辞任し、Swiftのテキストフィールドにファーストレスポンダーを割り当てます

user6500031

私は3つのテキストフィールドを取得し、OTPの目的で1つの整数のみを保持するようにしました(これはプロジェクト設計の必要性です)。ユーザーが最初のテキストフィールドに番号を入力すると、レスポンダーは自動的に2番目のテキストフィールドに割り当てられ、次に3番目のテキストフィールドに割り当てられます。ユーザーが3番目のテキストフィールドに最後のOTP桁を入力したらすぐに、Webサービスにアクセスしたいと思います。私がこれまでにしたことは:

class ActivationCodeVC: UIViewController, UITextFieldDelegate

その後

otpField1.delegate = self
otpField2.delegate = self
otpField3.delegate = self

その後

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

    let text=textField.text
    let counter = text?.characters.count
    if counter >= 1 {

        if textField == otpField1{

            otpField2.becomeFirstResponder()

        } else if textField == otpField2{

            otpField3.becomeFirstResponder()

        } else if textField == otpField3{

            otpField3.resignFirstResponder()

        }

    }

    return true
}

ユーザーが1番目のテキストフィールドに数字を入力すると、2番目のテキストフィールドでカーソルが点滅し始めます。しかし、そうではありません。2桁目を押すと、2桁目に入力され、カーソルは3桁目に移動せず、2桁目に留まります。次に、バックスペースで数字を削除しようとすると、たとえば、最初のテキストフィールドの数字を削除しようとすると、2番目のテキストフィールドから数字が削除されます。

実装する必要のある方法と、機能を正しく実現する方法を教えてください。

これを試しましたが、文字が最初のテキストフィールドではなく2番目のテキストフィールドに印刷されています。

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

    let text = textField.text
    // create Range<Index> object from old-style one
    let start = text!.startIndex.advancedBy(range.location)
    let end = start.advancedBy(range.length)
    let indexRange = start..<end
    // calculate result string value
    let result = text!.stringByReplacingCharactersInRange(indexRange, withString: string)

//        let text=textField.text
    let tempCount = result.characters.count
    if tempCount == 1 {

        if textField == otpField1{

            otpField2.becomeFirstResponder()

        } else if textField == otpField2{

            otpField3.becomeFirstResponder()

        } else if textField == otpField3{

            otpField3.resignFirstResponder()

            let tempCode = otpField1.text! + otpField2.text! + otpField3.text!

            if  !APPDELEGATE.internetStatusFalse {
                KVNProgress.showWithStatus("Loading...")
                let soapApiObj: SoapApi = SoapApi()
                mode = ControllerTypeMode.ACTIVAITONCODE
                soapApiObj.resDelegate = self
                soapApiObj.responseString = NSMutableString(string: "")
                soapApiObj.callActivationCodeApi(tempCode)
            }
            else{
                let obj: SuccessFullPopVC=self.storyboard?.instantiateViewControllerWithIdentifier("successFullPopVC") as! SuccessFullPopVC
                obj.titlelbl = LocalizationSystem.sharedLocalSystem().localizedStringForKey("Warning", value: nil)
                obj.imgSuccess = UIImage(named: "warning")
                obj.messagelbl = LocalizationSystem.sharedLocalSystem().localizedStringForKey("No internet connection.", value: nil)
                self.navigationController?.presentViewController(obj, animated: false, completion: nil)
            }

        }

    }

    return true
}

最終的な解決策をありがとう:

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

    let text = textField.text
    // create Range<Index> object from old-style one
    let start = text!.startIndex.advancedBy(range.location)
    let end = start.advancedBy(range.length)
    let indexRange = start..<end
    // calculate result string value
    let result = text!.stringByReplacingCharactersInRange(indexRange, withString: string)

    let newLength = result.characters.count

    if textField == otpField1{
        if newLength == 1 {
            otpField1.text = result
            otpField2.becomeFirstResponder()
            return false
        }

    } else if textField == otpField2{
        if newLength == 1 {
            otpField2.text = result
            otpField3.becomeFirstResponder()
            return false
        }

    } else if textField == otpField3{
        if newLength == 1 {
            otpField3.text = result
            return false

        }

    }

    return !(result.characters.count>1)
}

できます!!

アストリア

shouldChangeCharactersInRange-delegateメソッドが呼び出されます前に、実際のテキストの変更(文字PUT /削除お使いの場合)。

まず、入力アクションの後に取得する文字列を計算します。以下のスニペットのようにrangeデリゲートメソッドの引数(string)などを使用しtextField.textます。

let text = textField.text
// create Range<Index> object from old-style one
let start = text.startIndex.advancedBy(range.location)
let end = start.advancedBy(range.length)
let indexRange = start..<end
// calculate result string value
let result = text.stringByReplacingCharactersInRange(indexRange, withString: string)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ユーザーが他の場所をタップしたときにテキストフィールドからファーストレスポンダーを辞任するにはどうすればよいですか?

分類Dev

辞任してファーストレスポンダーになることなくキーボードを更新する

分類Dev

状態の変化により、シート内でキーボードがファーストレスポンダーとして辞任すると、SwiftUIiOSアプリがクラッシュします

分類Dev

状態の変化により、シート内でキーボードがファーストレスポンダーとして辞任すると、SwiftUIiOSアプリがクラッシュします

分類Dev

すべてのuiTextfieldでファーストレスポンダを辞任する方法を迅速に

分類Dev

ファーストレスポンダーがテーブルビューのリロードで辞任するのを防ぐ

分類Dev

Angularテンプレートリファレンスを使用して動的テキストフィールドに動的な値を追加します

分類Dev

UITextViewをファーストレスポンダーとして辞任した後、テーブルビューセルを選択できない

分類Dev

Dartを使用してダウンロード用のテキストファイルを動的に作成します

分類Dev

Swiftの変数にテキストフィールド値を割り当てる

分類Dev

テーブルビューのセルを選択せずにファーストレスポンダーとして検索バーを辞任するにはどうすればよいですか?

分類Dev

UIAlertControllerのテキストフィールドはファーストレスポンダーであってはなりません

分類Dev

テーブルビューに行を挿入し、テキストフィールドの最初のレスポンダーを設定します

分類Dev

カスタムファーストレスポンダーを迅速に辞任する方法

分類Dev

iOS 8-ユーザー名UITextFieldは、パスワードテキストフィールドの後にファーストレスポンダーになるときにエントリを保護します

分類Dev

iOS 13ダークモードでは、テキストフィールド内のラベルとテキストが自動的に白になります

分類Dev

iOS 13ダークモードでは、テキストフィールド内のラベルとテキストが自動的に白になります

分類Dev

params値をテキストフィールドタグに割り当てます

分類Dev

テキストフィールドに追加の引用符が含まれているSSMSを介してcsvファイルをインポートします

分類Dev

別のテキストフィールドに基づいて、一致率をテキストフィールドに割り当てます

分類Dev

最初のベースラインでUITextFieldと整列されたUILabelは、テキストフィールドがファーストレスポンダーになるまで機能しません(キーボードを取得)

分類Dev

Pythonを使用してWebディレクトリから複数のcsvファイルをダウンロードし、ファイル名としてアンカーテキストを使用してディスクに保存します

分類Dev

TableViewのセクションに動的テキストフィールドセルを挿入します-Swift

分類Dev

テキストフィールドからUITableViewに全体を追加して、自動的に入力します

分類Dev

テキストフィールドのプレースホルダーを中央揃えにします

分類Dev

すべての関数シンボルとそのベースアドレスをtrace32のテキストファイルにダンプします

分類Dev

スプレッドシートをAccessにインポートするときに、Excelがデータフィールドタイプを自動割り当てしないようにするにはどうすればよいですか?

分類Dev

ボタンのテキストに基づいてテキストフィールドに値を割り当てます

分類Dev

別のファイル/辞書のキーワードに基づいてファイル内のテキストをフィルタリングする

Related 関連記事

  1. 1

    ユーザーが他の場所をタップしたときにテキストフィールドからファーストレスポンダーを辞任するにはどうすればよいですか?

  2. 2

    辞任してファーストレスポンダーになることなくキーボードを更新する

  3. 3

    状態の変化により、シート内でキーボードがファーストレスポンダーとして辞任すると、SwiftUIiOSアプリがクラッシュします

  4. 4

    状態の変化により、シート内でキーボードがファーストレスポンダーとして辞任すると、SwiftUIiOSアプリがクラッシュします

  5. 5

    すべてのuiTextfieldでファーストレスポンダを辞任する方法を迅速に

  6. 6

    ファーストレスポンダーがテーブルビューのリロードで辞任するのを防ぐ

  7. 7

    Angularテンプレートリファレンスを使用して動的テキストフィールドに動的な値を追加します

  8. 8

    UITextViewをファーストレスポンダーとして辞任した後、テーブルビューセルを選択できない

  9. 9

    Dartを使用してダウンロード用のテキストファイルを動的に作成します

  10. 10

    Swiftの変数にテキストフィールド値を割り当てる

  11. 11

    テーブルビューのセルを選択せずにファーストレスポンダーとして検索バーを辞任するにはどうすればよいですか?

  12. 12

    UIAlertControllerのテキストフィールドはファーストレスポンダーであってはなりません

  13. 13

    テーブルビューに行を挿入し、テキストフィールドの最初のレスポンダーを設定します

  14. 14

    カスタムファーストレスポンダーを迅速に辞任する方法

  15. 15

    iOS 8-ユーザー名UITextFieldは、パスワードテキストフィールドの後にファーストレスポンダーになるときにエントリを保護します

  16. 16

    iOS 13ダークモードでは、テキストフィールド内のラベルとテキストが自動的に白になります

  17. 17

    iOS 13ダークモードでは、テキストフィールド内のラベルとテキストが自動的に白になります

  18. 18

    params値をテキストフィールドタグに割り当てます

  19. 19

    テキストフィールドに追加の引用符が含まれているSSMSを介してcsvファイルをインポートします

  20. 20

    別のテキストフィールドに基づいて、一致率をテキストフィールドに割り当てます

  21. 21

    最初のベースラインでUITextFieldと整列されたUILabelは、テキストフィールドがファーストレスポンダーになるまで機能しません(キーボードを取得)

  22. 22

    Pythonを使用してWebディレクトリから複数のcsvファイルをダウンロードし、ファイル名としてアンカーテキストを使用してディスクに保存します

  23. 23

    TableViewのセクションに動的テキストフィールドセルを挿入します-Swift

  24. 24

    テキストフィールドからUITableViewに全体を追加して、自動的に入力します

  25. 25

    テキストフィールドのプレースホルダーを中央揃えにします

  26. 26

    すべての関数シンボルとそのベースアドレスをtrace32のテキストファイルにダンプします

  27. 27

    スプレッドシートをAccessにインポートするときに、Excelがデータフィールドタイプを自動割り当てしないようにするにはどうすればよいですか?

  28. 28

    ボタンのテキストに基づいてテキストフィールドに値を割り当てます

  29. 29

    別のファイル/辞書のキーワードに基づいてファイル内のテキストをフィルタリングする

ホットタグ

アーカイブ