2017-12-30 33 views
0

スタティックセルを持つ学習目的のアプリケーションを作成していますが、ゼロから開始したいビューの上部にプログレスバーがあります。すべてのフィールドが入力されると、進行状況バーが完了し、saveというボタンが表示されます。私はこの方法がうまくいくと思った。スウィフト4にテキストフィールドが入力されたときのプログレスバーの割合

import UIKit 

class TableViewController: UITableViewController { 


    @IBOutlet var infoProgressBar: UIProgressView! 
    //all labels for adjusting same space 
    @IBOutlet var labels: [UILabel]! 

    //textfields for progress 
    @IBOutlet var infoTextFields: [UITextField]! { 
     didSet{ 
      infoProgressBar.setProgress(progress, animated: true) 
     } 
    } 


    //progress bar code 
    var progress:Float { 
     if textFieldProgress(count: true) { 
      return Float(infoTextFields)/Float(infoTextFields) 
     } else { 
      return 0 
     } 
    } 

    //function to check if there is info in textfields 
    func textFieldProgress(count: Bool) -> Bool { 
     if infoTextFields?.isEmpty ?? true { 
      return true 
     } else { 
      return false 
     } 
    } 

} 

私はすべてのテキストフィールドをinfoTextFieldsにリンクしています。ブール関数がfalseに戻ると、すぐにプログレスバーが終了します。私がそれをfalseに設定すると、それは半分から0になり、決して戻ってこない。

ここに私の見解は、これはあなたが探しているものですが、あなたはテキストフィールドごとにUITextFieldDelegateメソッドtextFieldDidEndEditingを使用して、あなたの幅を増やすことができれば必ず

enter image description here

答えて

1

は、空のテキストフィールドの合計数で除算しているどのように多くの分野をチェックするために削減:

var progress: Float { 
    return Float(infoTextFields.reduce(0) { $1.text?.isEmpty == true ? $0 : $0+1})/Float(infoTextFields.count) 
} 

あなたは編集のために、あなたのテキストフィールドにターゲットを追加する必要がありますdidSetので、制御イベントを変更テキストフィールドのテキストプロパティを変更したときに呼び出されることはありません。

@IBOutlet var infoTextFields: [UITextField]! 
@objc func editingChanged(_ textField: UITextField) { 
    infoProgressBar.setProgress(progress, animated: true) 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    infoTextFields.forEach({ 
     $0.addTarget(self, action: #selector(editingChanged), for: .editingChanged) 
    }) 
} 
+0

で動作すると信じています。私は –

+0

@BlueMooseで何回記入しても、プログレスバーを0に保ちました。私の編集をチェックします。また、同じアプローチを使用して、テキストが変更されたときにパスワードフィールドと一致するかどうかを確認したり、必要な場合があるかどうかを確認することもできます。 –

+0

ありがとうございました!私のやり方が、空白であるかどうかを見つけるためにbool funcを作っていたのではないかと思っています。あなたがちょうど私がまだ –

0

イムではありませんtextFieldが空でない場合はプログレスバー。あなたが使用することができます

+0

デリゲートを追加しました。アウトソーシングのテキストフィールドにディセンディングを付けるにはどうすればいいですか?あなたがUITextFeildDelegateを追加した後 –

+0

は、あなたが方法 FUNCのtextFieldDidEndEditing(_テキストフィールド:UITextFieldです)を呼び出す{ //ここにコード } – leedex

+0

私は方法は、これは私のために動作しませんでしたすべてのテキストフィールド – leedex

関連する問題