在 Swift 4 中输入文本字段时的进度条填充百分比
Progress bar to fill percentage when textfields are entered in 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 函数 return 设置为 false,则进度条会立即完成。如果我将它设置为 false,它会从一半变为零并且永远不会回来。
这是我的看法
我不确定这是否是您要查找的内容,但您可以对每个文本字段使用 UITextFieldDelegate 方法 textFieldDidEndEditing,如果文本字段不为空,则增加进度条的宽度。
您可以使用 reduce 来检查有多少字段为空并除以文本字段的总数:
var progress: Float {
return Float(infoTextFields.reduce(0) { .text?.isEmpty == true ? [=10=] : [=10=]+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({
[=11=].addTarget(self, action: #selector(editingChanged), for: .editingChanged)
})
}
我正在制作一个用于学习目的的应用程序,它具有静态单元格,并且在视图顶部有一个进度条,我想从零开始。当他们填写所有字段时,它会完成进度条,然后会出现一个按钮,提示保存。我认为这种方式会奏效。
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 函数 return 设置为 false,则进度条会立即完成。如果我将它设置为 false,它会从一半变为零并且永远不会回来。
这是我的看法
我不确定这是否是您要查找的内容,但您可以对每个文本字段使用 UITextFieldDelegate 方法 textFieldDidEndEditing,如果文本字段不为空,则增加进度条的宽度。
您可以使用 reduce 来检查有多少字段为空并除以文本字段的总数:
var progress: Float {
return Float(infoTextFields.reduce(0) { .text?.isEmpty == true ? [=10=] : [=10=]+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({
[=11=].addTarget(self, action: #selector(editingChanged), for: .editingChanged)
})
}