在Swift 4中输入文本字段时填充百分比的进度条

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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,则立即完成进度条。如果我把它设置为假它从一半变为零并且永远不会回来。

这是我的看法

enter image description here

答案

您可以使用reduce来检查有多少字段为空,并除以文本字段的总数:

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)
    })
}
另一答案

我不确定这是否是您正在寻找的,但您可以为每个文本字段使用UITextFieldDelegate方法textFieldDidEndEditing,如果textField不为空,则增加进度条的宽度。

以上是关于在Swift 4中输入文本字段时填充百分比的进度条的主要内容,如果未能解决你的问题,请参考以下文章

Swift中文本字段的百分比掩码

如何让进度条获取文本类型输入的值?

基于JQuery的进度条实现

怎样用div实现带百分百环形进度条

使用倒计时日期保存当前进度 - 进度条引导程序 4

进度条无规律地移动