ios - 3个文本字段,1个pickerview,但是,当使用pickerView时,选择不显示在文本字段中
问题描述
UIPickerView
显示数据但不传输到UITextField
。
我检查了其他帖子以比较我的代码,但仍然找不到解决方案。非常感谢您的帮助。
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, UITextFieldDelegate {
@IBOutlet weak var hospNameField: UITextField!
@IBOutlet weak var teamNameField: UITextField!
@IBOutlet weak var mdNameField: UITextField!
@IBOutlet weak var selectionsPickerView: UIPickerView!
var hosp = ["hosp1", "hosp2", "hosp3"]
var team = ["team1", "team2", "team3"]
var mds = ["MD1", "MD2", "MD3"]
var itemSelected = ""
var textFieldSelected = UITextField()
weak var pickerView: UIPickerView?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let pickerView = UIPickerView()
pickerView.delegate = self
pickerView.dataSource = self
hospNameField.inputView = pickerView
teamNameField.inputView = pickerView
mdNameField.inputView = pickerView
hospNameField.delegate = self
teamNameField.delegate = self
mdNameField.delegate = self
self.pickerView = pickerView
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func textFieldDidBeginEditing(_ textField: UITextField) {
textFieldSelected = textField
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if hospNameField.isFirstResponder {
return hosp.count
} else if teamNameField.isFirstResponder {
return team.count
} else if mdNameField.isFirstResponder {
return mds.count
}
return 0
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if hospNameField.isFirstResponder {
return hosp[row]
} else if teamNameField.isFirstResponder {
return team[row]
} else if mdNameField.isFirstResponder {
return mds[row]
}
return nil
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if teamNameField.isFirstResponder {
let itemselected = hosp[row]
hospNameField.text = itemselected
} else if teamNameField.isFirstResponder {
let itemselected = team[row]
teamNameField.text = itemselected
} else if mdNameField.isFirstResponder {
let itemselected = mds[row]
mdNameField.text = itemselected
}
}
}
解决方案
我认为您的代码在didSelectRow
. 检查第一个和第二个if
,两者都运行相同的条件。
if teamNameField.isFirstResponder {
let itemselected = hosp[row]
hospNameField.text = itemselected
} else if teamNameField.isFirstResponder {
let itemselected = team[row]
teamNameField.text = itemselected
} else if mdNameField.isFirstResponder {
let itemselected = mds[row]
mdNameField.text = itemselected
}
我认为您应该将第一个更改if
为if hospNameField.isFirstResponder {..}
推荐阅读
- c - 有人能解释一下这个状态机程序是如何工作的吗?
- javascript - classList.add() 插入变量而不是字符串
- javascript - 如何在没有任何自省的情况下创建一个纯功能的临时多态镜头?
- android - android 应用程序如何自动更新,无需我在 Playstore 上更新它?
- php - PHP 表单不工作但没有收到任何错误消息
- amazon-web-services - 放大 403 也出现了 CORS 错误
- tfs - 导入导出 Wit TFS17 - 看不到新字段
- gun - 在会话期间保持 Gun DB 用户的身份验证
- asp.net-mvc - 我的 asp.net mvc 应用程序出现 503 错误时没有登录 http.sys
- angular - 如何使用 authStateChange$ amplifyService guard.ts