尝试为多个文本字段分别创建选择器视图输入。

11 浏览
0 Comments

尝试为多个文本字段分别创建选择器视图输入。

我正在使用Swift制作一个GPA计算器,但遇到了一些问题。我创建了一个选择器视图,其中包含所有的字母等级(A到F)。我放置了7个文本字段(每个课程一个)。我希望用户点击文本字段时,选择器视图会出现,并且所选等级会显示在文本字段中。我已经成功为第一个文本字段做到了这一点,但我不知道如何编写代码,使我能够为每个文本字段选择等级。我尝试了不同的方法,但总是只能改变第一个文本字段。

非常感谢任何帮助 🙂

这是我的代码(gradeOne是第一个课程的文本字段,gradeTwo是第二个课程的文本字段,以此类推):

import UIKit

class GPA: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

@IBOutlet var gradeOne: UITextField!

@IBOutlet var gradeTwo: UITextField!

//等级数组

var grades = ["A+/A (85-100)", "A- (80-84)", "B+ (77-79)", "B (73-76)", "B- (70-72)", "C+ (67-69)", "C (63-66)", "C- (60-62)", "D+ (57-59)", "D (53-56)", "D- (50-52)", "F (0-49)"]

//第一个等级选择器

func numberOfComponentsInPickerView(gradePickerView: UIPickerView) -> Int {

return 1

}

func pickerView(gradePickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

return grades.count

}

func pickerView(gradePickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

return grades[row]

}

func pickerView(gradePickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

gradeOne.text = grades[row]

}

//使键盘消失

override func viewDidLoad() {

super.viewDidLoad()

// 在加载视图之后进行任何其他设置,通常是使用nib文件。

let gradePickerView = UIPickerView()

gradePickerView.delegate = self

gradeOne.inputView = gradePickerView

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))

view.addGestureRecognizer(tap)

}

func dismissKeyboard() {

// 导致视图(或其嵌入的文本字段之一)放弃第一响应者状态。

view.endEditing(true)

}

}

0
0 Comments

问题的出现的原因:函数textFieldShouldBeginEditing出现错误。

解决方法:检查函数textFieldShouldBeginEditing的实现,确保语法正确。

0
0 Comments

问题的出现原因:

问题是想要为七个不同的文本字段分别创建一个选择器视图输入。每次点击文本字段时,选择器视图将显示出来。选择器视图中选择的单元格的值应该显示在刚刚点击的文本字段中。

解决方法:

1. 为每个文本字段添加标签:yourtextField.view.tag = 0(或1、2、3、4等)。

2. 在显示选择器视图时,将选择器视图的标签设置为相应文本字段的标签:pickerView.tag = yourtextField.view.tag。

3. 在pickerView的didSelectRow方法中,通过获取文本字段的标签来确定要显示的文本字段:let mytag = pickerView.tag。然后通过"mytag"找到相应的文本字段,并更改其文本。

代码示例:

yourtextField.view.tag = 0

pickerView.tag = yourtextField.view.tag

let mytag = pickerView.tag

let selectedTextField = view.viewWithTag(mytag) as? UITextField

selectedTextField?.text = pickerView.selectedRow(inComponent: 0).description

希望能帮到你!祝好运!

0
0 Comments

问题的原因是需要为多个文本字段分别创建选择器视图的输入。解决方法是将gradePickerView设置为所有文本字段的inputView,并在pickerView:didSelectRow:方法中将文本设置为活动文本字段的文本。建议使用UITextFieldDelegate设置活动文本字段。

首先,在视图加载时设置视图控制器为文本字段的委托,并设置活动文本字段:

var activeField: UITextField?

override func viewDidLoad() {

// Set VC as textfield's delegate

gradeTwo.delegate = self

gradeThree.delegate = self

// Set for rest of textfields

}

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {

activeField = textField

}

然后,在pickerView:didSelectRow:方法中,将选择的行的文本设置为活动文本字段的文本:

func pickerView(gradePickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

activeField.text = grades[row]

}

此外,为了解决添加“Done”按钮和“Cancel”按钮的功能问题,首先需要检查应用程序崩溃的原因。可以在Xcode的控制台日志中查看错误消息。可能是因为调用了尚未实现的函数导致的未知选择器崩溃。可以通过编程方式或通过接口构建器/故事板来添加按钮。以下是一些关于添加按钮的指南(链接)。

为了实现多个文本字段的选择器输入,我们需要将gradePickerView设置为所有文本字段的inputView,并使用UITextFieldDelegate设置活动文本字段。此外,为了使“Done”按钮和“Cancel”按钮功能正常工作,需要检查崩溃的原因并相应地添加按钮。

0