首页 文章

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

提问于
浏览
0

我尝试引用新添加的textFields . 关键是要放入这些文本字段数据,然后将其保存在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 func add中,textfields类的函数将启动,每次按下add按钮都会创建一个新行 .

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

 }

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

当我使用Storyboard时,解决方案很简单:IBoutlet,但现在我不知道如何找到解决方案 .

1 回答

  • 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)
       }
    }
    

相关问题