【发布时间】:2021-05-05 06:48:45
【问题描述】:
我正在编写一个简单的健身应用程序,允许用户添加在UIPickerView,选择的用户配置文件中,并且在选择时,在Main ViewController的标签上输入@ 987654322。 pickerView 使用 Profile 对象的数组作为其数据源,并在选取器中显示配置文件的名称。我将其设置为用户单击主ViewController 上的按钮并连接到AddProfileViewController,在那里他们输入创建配置文件的必要要求。当他们点击提交时,信息成功附加到profileNames 数组,但pickerView 在用户单击它时不会显示任何更改。我试过使用pickerView.reloadAllComponents() 和pickerView.reloadComponent(1) 没有成功。
我使用的是 Xcode 版本 12.4 (12D4e)
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
{
@IBOutlet weak var profileField: UITextField!
@IBAction func didTapEnter(_ sender: Any)
{
}
@IBAction func didTapNewProfile(_ sender: Any)
{
}
//these are pre-populated values in this array
var profileNames: [Profile] =
[
Profile("Brandon", 2, 120, 20, "Male"),
Profile("G", 2, 100, 20, "Male"),
Profile("K", 1.6, 111, 19, "Male"),
Profile("F", 2.1, 95, 20, "Male"),
Profile("J", 1.89, 97.5, 21, "Male")
]
var pickerView = UIPickerView()
override func viewDidLoad()
{
super.viewDidLoad()
pickerView = UIPickerView()
pickerView.delegate = self
pickerView.dataSource = self
profileField.inputView = pickerView
profileField.textAlignment = .center
profileField.placeholder = "Enter Profile"
}
func numberOfComponents(in pickerView: UIPickerView) -> Int
{
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
return profileNames.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
{
return profileNames[row].name
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
profileField.text = profileNames[row].name
profileField.resignFirstResponder()
}
func profileSubmit(_ data: Profile)
{
profileNames.append(data)
pickerView.reloadComponent(1) //This does not seem to do anything for me
}
}
class AddProfileViewController: UIViewController, UINavigationControllerDelegate
{
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var weightTextField: UITextField!
@IBOutlet weak var heightTextField: UITextField!
@IBOutlet weak var ageTextField: UITextField!
@IBOutlet weak var sexTextField: UITextField!
let main: ViewController? = nil
@IBAction func submit(_ sender: Any)
{
let name = String(nameTextField.text!)
let height = Double(heightTextField.text!)!
let weight = Double(weightTextField.text!)!
let age = Double(ageTextField.text!)!
let sex = String(sexTextField.text!)
let new = Profile.init(name, height, weight, age, sex)
main?.profileSubmit(new)
new.display()
dismiss(animated: true, completion: nil)
}
override func viewDidLoad()
{
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
【问题讨论】:
标签: ios arrays swift xcode uipickerview