在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,则立即完成进度条。如果我把它设置为假它从一半变为零并且永远不会回来。
这是我的看法
答案
您可以使用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中输入文本字段时填充百分比的进度条的主要内容,如果未能解决你的问题,请参考以下文章