2017-12-30 33 views
0

정적 셀이있는 학습용으로 응용 프로그램을 만들고 있는데,보기의 맨 위에 0부터 시작하려는 진행 막대가 있습니다. 모든 필드를 채우면 진행률 표시 줄이 완료되고 저장이라는 메시지가 나타납니다. 나는이 방법이 효과가있을 것이라고 생각했다.텍스트 필드가 Swift에 입력되었을 때 진행률 막대로 채우기 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에 연결했습니다. bool 함수가 false로 돌아 가면 진행률 막대가 바로 완료됩니다. false로 설정하면 절반에서 0으로 바뀌며 결코 돌아 오지 않습니다.

여기 내보기의

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으로 유지했습니다. –

+0

@BlueMoose가 제 편집을 확인합니다. 또한 동일한 접근법을 사용하여 텍스트가 변경 될 때 암호 (다시) 필드가 암호 필드와 일치하는지 확인해야 할 수도 있습니다. –

+0

감사합니다! 내 방식이 공백인지 아닌지 찾기 위해 부울 기능을 만드는 데 효과가 있었는지 궁금 할뿐입니다. 이유는 방금 추가 한 모든 것이므로 아직 이해가 안됩니다 –

0

임 이것이 당신이 찾고있는,하지만 당신은 당신의 텍스트 필드의 각각에 대한 UITextFieldDelegate 방법 textFieldDidEndEditing를 사용의 폭을 증가시킬 것입니다 있는지 확실하지 않습니다 당신의 textField가 비어 있지 않은 경우 진행률 표시 줄입니다.

+0

대리인을 추가했습니다. 아웃 디어 텍스트 필드에 디디 언트를 첨부하려면 어떻게합니까? 당신이 UITextFeildDelegate을 추가 한 후 –

+0

, 당신은 방법 FUNC의 textFieldDidEndEditing (_에 textField : UITextField에)를 호출 { // 여기에 코드 } – leedex

+0

나는 방법이 나를 위해 작동하지 않았다 모든 텍스트 필드 – leedex