如何在UIPickerView中添加UITextField viewForRow
问题描述:
我在UIPickerView的viewForRow事件中尝试了下面的代码。当标签出现时,Textfield不出现。是否允许在选择器视图中添加文本框?如何在UIPickerView中添加UITextField viewForRow
这是我的代码:
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
var rowDict = NSDictionary()
var retView = UIView()
let label = UILabel(frame: CGRect.init(x: 0, y: 0, width: 400, height: 40))
let textField = UITextField(frame: CGRect.init(x: 0, y: 0, width: 400, height: 40))
if(pickerView == pickerView2)
{
rowDict = self.arrayList02[row] as! NSDictionary
let rowValue = rowDict["QueryAttribute"] as? String
label.numberOfLines = 0
label.text = rowValue
label.sizeToFit()
if rowValue == "Other Specify:"{
textField.placeholderText = rowValue
textField.isUserInteractionEnabled = true
retView = textField
}
else {
retView = label
}
}
return retView
}
答
我想这个代码采取的UIPickerView选择特定选项
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
selectionHandler?(pickerView, row, arrayList[row] as! String)
var rowValue = NSDictionary()
if(arrayList.count > 0) {
rowValue = self.arrayList[row] as! NSDictionary
if(rowValue["ItemCode"] as? String != "99"){
textView.text = rowValue["Item"] as? String
textView.tag = rowValue["Id"] as! Int
}
if(isOtherSpecifyRequired){
let lastRow = pickerView.numberOfRows(inComponent: component) - 1
let lastRowValue = rowValue["Item"] as? String
setOtherSpecifyField(lastRow: lastRow, row: row, lastRowValue: lastRowValue!, textField: textView)
}
}
}
func setOtherSpecifyField(lastRow: Int, row: Int, lastRowValue: String, textField: CustomTextField){
if row == lastRow{
ShowAlertWithTextBox(title: "Other Specify", message: "Please enter some text ", parentView: textField)
textField.tag = 0
}
}
func ShowAlertWithTextBox(title: String, message: String, parentView: UITextField)
{
let alert = UIAlertController(title: title , message: message, preferredStyle: UIAlertControllerStyle.alert)
alert.addTextField(configurationHandler: textFieldHandler)
alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.default, handler: nil))
alert.addAction(UIAlertAction(title: "Submit", style: UIAlertActionStyle.default, handler: { (UIAlertAction) in
parentView.text = alert.textFields?[0].text }))
if let presented = _viewController.presentedViewController {
presented.removeFromParentViewController()
}
if _viewController.presentedViewController == nil {
self._viewController.present(alert, animated: true, completion: nil)
}
}
func textFieldHandler(textField: UITextField!)
{
if (textField) != nil {
textField.placeholder = "Other Specify"
}
}
你的代码,用户输入指示了'viewForRow'可以选择其中一个选项,一个UILabel或一个UITextField。可能您的rowValue从未等于“其他指定:” – antonio081014
我试过删除UILabel。现在UITextField正在出现。但它似乎并不可编辑..不允许输入文本。 –
是否可以在UIPickerView中为特定的行值添加额外的UITextField? –