如何为通过代码创建的UITextField添加IBAction?
代码创建的UITextField添加编辑事件并计算课程成绩
因为是纯代码创建的UITextField,没法用Storyboard的IBAction绑定,直接通过target-action机制就能实现编辑触发事件的需求,步骤如下:
- 声明数组管理所有动态创建的文本框
// 用来存储所有作业分数输入框,方便后续遍历计算 var scoreTextFields = [UITextField]()
- 创建UITextField时绑定事件
创建文本框的同时,给它添加编辑状态变化的监听,把处理方法和当前控制器绑定:
// 注意变量名别用label,改成scoreField更贴合用途 let scoreField = UITextField(frame: CGRect(x: 0, y: 0, width: 300, height: 21)) // 设置数字键盘,方便输入分数 scoreField.keyboardType = .decimalPad // 绑定编辑变化事件,触发计算方法 scoreField.addTarget(self, action: #selector(calculateCourseScore), for: .editingChanged) // 把当前文本框加入管理数组 scoreTextFields.append(scoreField) // 添加到视图显示 view.addSubview(scoreField)
- 实现成绩计算方法
编写calculateCourseScore方法,遍历所有文本框累加有效分数:
@objc func calculateCourseScore() { var totalScore = 0.0 // 遍历所有输入框,提取有效分数并累加 for textField in scoreTextFields { guard let scoreText = textField.text, let score = Double(scoreText) else { continue // 跳过空值或非数字的输入 } totalScore += score } // 这里可以把计算结果展示到界面,比如赋值给UILabel // example: courseResultLabel.text = "课程总分:\(totalScore)" }
补充说明
- 事件类型可选:如果希望用户结束编辑时再计算,把
.editingChanged换成.editingDidEnd即可。 - 数组管理是关键:因为文本框数量可变,必须用数组统一存储,才能遍历所有输入项计算。
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

