如何在Swift中引用以编程方式添加的TextField从内部获取数据?

时间:2018-07-27 12:36:43

标签: ios swift

我尝试引用新添加的textField。关键是要放入这些文本字段数据,然后将其保存在CoreData中,但是我不知道该怎么做。

在打印屏幕下方

By the help of Add button I can add new row of textfields

Textfields的模型在另一个类“ txtfields”中,而不在ViewController中。在textfields类中,所有文本字段都放置在函数中。

class txtFields: UIView {




func inputTxtFields( value: Int,value2: Int, value3:Int, ScrollView: UIView) {



    var tf = UITextField(frame: CGRect(x: 20, y: value, width: 100, height: 30))
    tf.backgroundColor = .white
    tf.placeholder = "excercise"
    tf.layer.cornerRadius = 5
    ScrollView.addSubview(tf)




    var tf2 = UITextField(frame: CGRect(x: 150, y: value2, width: 30, height: 30))
    tf2.backgroundColor = .white
    tf2.layer.cornerRadius = 5
    tf2.placeholder = "rp"
    ScrollView.addSubview(tf2)



    let tf3 = UITextField(frame: CGRect(x: 150, y: value3, width: 30, height: 30))
    tf3.backgroundColor = .white
    tf3.layer.cornerRadius = 5
    tf3.placeholder = "kg"
    ScrollView.addSubview(tf3)



    let tf4 = UITextField(frame: CGRect(x: 200, y: value2, width: 30, height: 30))
    tf4.backgroundColor = .white
    tf4.layer.cornerRadius = 5
    tf4.placeholder = "rp"
    ScrollView.addSubview(tf4)


    let tf5 = UITextField(frame: CGRect(x: 200, y: value3, width: 30, height: 30))
    tf5.backgroundColor = .white
    tf5.layer.cornerRadius = 5
    tf5.placeholder = "kg"
    ScrollView.addSubview(tf5)


    let tf6 = UITextField(frame: CGRect(x: 250, y: value2, width: 30, height: 30))
    tf6.backgroundColor = .white
    tf6.layer.cornerRadius = 5
    tf6.placeholder = "rp"
    ScrollView.addSubview(tf6)

    let tf7 = UITextField(frame: CGRect(x: 250, y: value3, width: 30, height: 30))
    tf7.backgroundColor = .white
    tf7.layer.cornerRadius = 5
    tf7.placeholder = "kg"
    ScrollView.addSubview(tf7)


    let tf8 = UITextField(frame: CGRect(x: 300, y: value2, width: 30, height: 30))
    tf8.backgroundColor = .white
    tf8.layer.cornerRadius = 5
    tf8.placeholder = "rp"
    ScrollView.addSubview(tf8)

    let tf9 = UITextField(frame: CGRect(x: 300, y: value3, width: 30, height: 30))
    tf9.backgroundColor = .white
    tf9.layer.cornerRadius = 5
    tf9.placeholder = "kg"
    ScrollView.addSubview(tf9)

    let tf10 = UITextField(frame: CGRect(x: 350, y: value2, width: 30, height: 30))
    tf10.backgroundColor = .white
    tf10.layer.cornerRadius = 5
    tf10.placeholder = "rp"
    ScrollView.addSubview(tf10)

    let tf11 = UITextField(frame: CGRect(x: 350, y: value3, width: 30, height: 30))
    tf11.backgroundColor = .white
    tf11.layer.cornerRadius = 5
    tf11.placeholder = "kg"
    ScrollView.addSubview(tf11)

}

在ViewController(vc3)中,我创建了textfields对象:let Fields = textfields()。

在IBoutlet功能添加中,textfields类的功能将启动,每按一次添加按钮将创建一个新行。

class vc3: UIViewController {

var train = [Training]()
let access = Data()
var name:String?
var buttonPressed = 0
var  wartoscy = 250
var wartosc2 = 265
var wartosc3 = 230
var addClicked = 0
var indexPath = 0
let Fields = txtFields()
var quantity = 0


@IBAction func add(_ sender: UIButton) {
    print("clicked")

    if self.quantity < 10 {
        Fields.inputTxtFields( value: wartoscy, value2: wartosc2, value3: wartosc3, ScrollView: scview)

    } else {

        Alert.showAlert(vc: self)

        return
        }

    buttonPressed += 1
    quantity += 1
    addClicked += 1
    btnSave.isHidden = false
    btnconstraints.constant += 100
    wartoscy += 80
    wartosc2 += 80
    wartosc3 += 80

 }

正如您现在所看到的,我有这些文本字段的名称,例如tf1 ... tf2 ..等等,但是我不知道如何引用它们来创建Core数据属性。也许我应该创建没有功能的它们?但是我需要具有value(wartosc),该值用于将文本字段移动到较低位置。变量wartosc放在vc3中。我当然希望像现在这样在另一个类中拥有所有这些文本字段。

当我使用Storyboard时,只有一个简单的解决方案:IBoutlet,但现在我不知道如何找到解决方案。

1 个答案:

答案 0 :(得分:0)

您需要像这样引用它们

class txtFields: UIView {
   var tf:UITextField!
   func inputTxtFields( value: Int,value2: Int, value3:Int, ScrollView: UIView) {
      tf = UITextField(frame: CGRect(x: 20, y: value, width: 100, height: 30))
   }
}

//

let Fields = txtFields()
Fields.inputTxtFields( value: wartoscy, value2: wartosc2, value3: wartosc3, ScrollView: scview)
print(Fields.tf.text)

//

我还建议创建一个返回文本字段实例的函数,而不是重复相同的代码

//

根据您的评论

class txtFields: UIView {
   var allTexFs = [UITextField]()
   func inputTxtFields( value: Int,value2: Int, value3:Int, ScrollView: UIView) {
     let tf = UITextField(frame: CGRect(x: 20, y: value, width: 100, height: 30))
     allTexFs.append(tf)
   }
}