问题描述
我正在编写一个简单的健身应用程序,它允许用户添加显示在 UIPickerView
中的用户个人资料,并在选择后输入到主 {{1} 上的 profileField
标签中}}。 ViewController
使用一组 pickerView
对象作为其数据源,并在选择器中显示配置文件的名称。我已将其设置为用户在主 Profile
上单击按钮的位置,然后转到 ViewController
,他们在其中输入创建配置文件的必要要求。当他们点击提交时,信息成功附加到 AddProfileViewController
数组,但当用户点击它时 profileNames
不会显示任何更改。我曾尝试使用 pickerView
和 pickerView.reloadAllComponents()
没有成功。
我使用的是 Xcode 版本 12.4 (12D4e)
pickerView.reloadComponent(1)
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",100,Profile("K",1.6,111,19,Profile("F",2.1,95,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
}
}
解决方法
我猜从 newProfile 返回时调用了 viewDidLoad -> 您可以通过将它设置为新实例来重置 viewDidLoad 中的选择器。尝试删除 viewDidLoad 中的新初始化:
super.viewDidLoad()
pickerView = UIPickerView()
选择器已经在这里初始化:
var pickerView = UIPickerView()
另外,我认为选择器组件从 0 开始 - 所以如果只有 1 个组件,它应该是:
pickerView.reloadComponent(0)